2011-05-18 47 views
1

我有一个具有多个字段的表单。我有jQuery的模糊事件处理程序在所有字段上进行一些验证,当你离开一个领域。问题是,如果你一直专注于一个领域,然后点击页面上的任何其他链接,它将验证该领域,但绝不允许链接被点击(或表单被提交)。Jquery模糊事件干扰所有其他事件

$('.required').bind('blur', function(event) { 
    validateAll($(event.target)); 
}); 

function validateAll(elm) { 
    //blah blah 
    return false; 
} 

validateAll函数只是执行检查并返回false后。

基本上,当用户专注于一个领域时,他们必须点击任何按钮两次才能使其工作。第一个激活模糊验证,然后第二个实际点击链接。

关于发生了什么的任何想法?

回答

-1

虽然你说它只是做检查并在返回后返回false,但你并没有在模糊处理程序中返回validateAll。如果它试图阻止进一步的事件冒泡返回false,那么你会想要返回它,而不是仅仅调用validateAll(并且对返回的内容无所作为)。

看不出有什么会导致你描述的问题,但也许我只是误解了这个问题。

+0

我添加了一些代码来显示它是如何返回。我的意思是,不管最后validateAll里面的内容如何,​​该函数总是返回false。但我同意,我不知道为什么会阻止其他事件处理程序被调用。 – Danny 2011-05-19 01:42:18

+0

我认为你错过了我的观点:它不是关于validateAll返回的内容,而是关于blur事件处理程序返回的内容。 validateAll返回false本身没有任何作用:该函数可以返回false直到奶牛回家,除非你返回它在blur处理程序中返回的内容,否则validateAll return语句将毫无意义。 – machineghost 2011-05-19 17:02:39

0

我发现了一些其他类似的帖子。

常见的解决办法是尝试在模糊事件处理程序添加延迟,像这样:

$('.required').bind('blur', function(event) { 
    setTimeout(function() 
    { 
     validateAll($(event.target)); 
    }, 10); 
}); 

希望这有助于...