2011-05-18 43 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); 
}); 

希望這有助於...