我编写了一个脚本来验证表单中字段中的输入,并希望此字段在字段获得焦点时立即开始操作。但是现在,什么也没发生。这是jsfiddle的例子:
http://jsfiddle.net/klebermo/f8U4c/1/
码
$(document).on('.valida', 'focus', function(){
$("#result").append("<p>starting validation</p>");
var regex = $(this).attr('pattern');
var counter = 0;
var tam = size_of(regex);
var str = generate_string(regex, tam);
$(this).val(str);
$("#result").append("<p>counter = "+counter+"</p>");
$("#result").append("<p>str = "+str+"</p>");
$(this).keypress(function(event){
var tecla = e.which;
if(typeof tecla == type_of(regex, counter)){
str[counter] = tecla;
if(typeof tecla == 'number' || typeof tecla == 'string')
counter++;
else
counter += 2;
}
$("#result").append("<p>counter = "+counter+"</p>");
$("#result").append("<p>str = "+str+"</p>");
$(this).val(str);
});
});
任何人都知道我的代码出了什么问题?
答案 0 :(得分:3)
您的参数顺序错误:
$(document).on('.valida', 'focus', function(){
应该是:
$(document).on('focus', '.valida', function(){
否则,它会在.valida
元素上寻找<focus>
个事件,但却无法找到任何内容。
此外,每次关注元素时,您都会重新绑定按键事件:
$(this).keypress(function(event){
这并不是要在按键事件中实际执行代码,它只是要添加一个新的事件处理程序。因此,每次关注元素时,都会不断添加新的处理程序。您可能只需在焦点处理程序外添加按键处理程序一次。按照您在焦点中进行的操作(显示验证)分离您在按键操作中所做的事情(计算验证)。
答案 1 :(得分:1)
选择器
$('.valida').on('focus', function(){
焦点和模糊事件由W3C指定为不冒泡,但jQuery定义了跨浏览器的焦点和焦点输出事件。当焦点和模糊用于附加委托事件处理程序时,jQuery会映射名称并分别将它们作为focusin和focusout传递。为保持一致性和清晰度,请使用冒泡事件类型名称。 改变了你的工作。