1

我有一个通过 Symfony 构建的文本区域,代码如下:

控制器:

$form = $this->createFormBuilder($defaultData)
    ->add('name', 'text', array('label' => 'Name:'))
    ->add('email', 'email', array('label' => 'Email Address:'))
    ->add('subject', 'text', array('label' => 'Subject:'))
    ->add('message', 'textarea', array('label' => 'Message:'))
    ->getForm();

模板:

<div>
    {{ form_errors(form.message) }}
    <p class="label">{{ form_label(form.message) }}</p>
    {{ form_widget(form.message, { 'attr' : { 'class' : 'input', 'id' : 'message', 'rows' : '8' } }) }}
</div>

这会产生以下 HTML:

<div>   
    <p class="label"><label for="form_message" class="required">Message:</label></p>
    <textarea id="form_message" name="form[message]" required="required"    class="input" id="message" rows="8">Type your message here</textarea>
</div>

现在,当文本区域被聚焦时,我希望初始文本消失。我只是不知道该怎么做。我试过了:

$("#message").focus(function() {
    if (this.text() == "Type your message here") {
        this.text("");
    }
});

但无济于事。

4

1 回答 1

1

你的代码有几个问题。

首先,对于您不使用的 textarea,请.text()使用.val()许多其他表单对象。引用焦点函数中的对象,$(this)而不是 only this。最后,您的 textarea 有 2 个 id #message,并且#form_message仅使用 1 个 ID,因此 HTML 结果如下:

<div>   
  <p class="label"><label for="form_message" class="required">Message:</label></p>
  <textarea name="form[message]" required="required" class="input" id="message" rows="8">Type your message here</textarea>
</div>

更正后的 jQuery 函数结果为:

$("#message").focus(function() {
    if ($(this).val() == "Type your message here") {
        $(this).val("");
    }
});
于 2012-12-28T03:41:11.847 回答