专注于textarea

时间:2010-04-09 05:47:00

标签: jquery jquery-selectors jquery-validate javascript

在下面的代码中,textarea添加了6次,最初textarea包含文本Enter Text。 我的问题是,如果用户在第一个和第三个textareas中输入数据。 如何警告用户说“textareas是空的”这是一般性消息,但是关注第二个文本区域,当用户在第二个文本区域输入数据时,应该关注下一个文本区域。

 <script>  
 function ad_R(count)
 {
  //Adding and populating table row 
  var row = '<tr>';
  row += '<td>';
  row += '<textarea rows = "8" cols = "18" border ="0" class="input" style="border:none;overflow:visible;width:100%;" id="details'+count+'" nfocus="if (this.value == \'Enter text\') this.value = \'\';" onblur="if (this.value == \'\') this.value = \'Enter text\';" name ="detail'+count+'" class="row_details'+r_count+'">Enter text</textarea></td></tr>';
  }

  $(document).ready(function() {
   cnt += '<table cellspacing="0" cellpadding="0" border="1" width="100%" id="_table">';
   cnt += '<tr>';
   cnt += '<th width="30%">Category</th>';
   cnt += '</tr>';
   for(var i=0;i<6;i++)
   {
      cnt += add_R(6);
     }
    cnt += '</table>';

   });

3 个答案:

答案 0 :(得分:1)

通常,您应该删除像onblur=这样的内联处理程序。

使用jQuery代替所有这些事件。对于实例

$('textarea').bind('focusout', function(e){
   if($(this).val() == "")
      alert('Textarea ' + this.id + ' is empty');
});

我担心我没有完全明白你想要做什么,但我确定 您可以通过一些处理程序来管理您的所有需求。

$('textarea').bind('keydown', function(e){
   var $next = $(this).next('textarea');
   if($next) $next.focus();
});

会跳到下一个textarea(即使我不知道为什么)

修改 因为你要在thefly上添加这些textareas,你可能应该使用.live()或 甚至更好.delegate()来绑定这些事件处理程序。

答案 1 :(得分:1)

对于用户而言,输入表单的行为与您描述的一样非常烦人。最好在用户操作后执行textarea验证,例如单击按钮。这些行为暗示用户假定他/她完成了输入,这是执行验证的绝佳时机。

这是一段验证代码示例,它显示缺失文本区域输入的警报,并在消息后给予焦点:

$(document).ready(function() {
    $("#buttonid").click(function() {
        for (var i = 0; i < 6; i++) {
            if ($("#details" + i).val() == "") {
                alert("You are missing some input!");
                $("#details" + i).focus();
                return false;
            }
        }
        return true;
    });
}

答案 2 :(得分:0)

该片段的“编译”有些缺失(一些明显的全局cnt和r _ count),并且是函数ad_Radd_R
该函数也没有返回任何内容,因此+=函数中返回值的document-ready将无法正常工作。
我想你也想在调用函数时发送索引计数(i)而不是硬编码数6?而且,当你为textarea构建HTML字符串时,有一个属性“nfocus”可能很适合“onfocus”。

除此之外,目标是以某种方式让用户以特定顺序在区域中输入文本?即,不要在1之前填写2,在2之前填写3,依此类推?