在下面的代码中,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>';
});
答案 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_R
或add_R
?
该函数也没有返回任何内容,因此+=
函数中返回值的document-ready
将无法正常工作。
我想你也想在调用函数时发送索引计数(i
)而不是硬编码数6
?而且,当你为textarea构建HTML字符串时,有一个属性“nfocus”可能很适合“onfocus”。
除此之外,目标是以某种方式让用户以特定顺序在区域中输入文本?即,不要在1之前填写2,在2之前填写3,依此类推?