2015-10-05 161 views
4

我有具有錯誤消息,如下面的例子中的一種形式:如何在'blur'事件觸發前觸發'submit'事件?

http://codepen.io/anon/pen/dYWyEM?editors=101

步驟來重現問題如下:

打開codepen鏈接後,

1)焦點在輸入欄

2)按提交按鈕

3)由於首先觸發模糊事件,所以首先隱藏錯誤消息,從而改變提交按鈕的位置。因此點擊事件根本沒有被註冊,我需要再次點擊才能提交​​表單。

有沒有辦法先發送提交事件?

不知怎的,我需要檢測觸發模糊事件的目標。 看起來relatedTarget使我們能夠找出觸發模糊事件的元素。但是,這在Firefox中不起作用。

是否有辦法找出所有瀏覽器中的relatedTarget?

+0

您可以簡單地延遲隱藏您的錯誤信息約10毫秒? – somethinghere

+0

而不是'display:none'你也許可以使用'visibility:hidden'?不是真正的答案,但它可以提供一種可能的解決方法。 – ZiNNED

+0

綁定鍵盤事件/輸入處理程序以在有效時刪除消息 – charlietfl

回答

6

如果您的意圖是對模糊進行字段驗證,您仍然需要一種方法來檢查表單提交時是否存在任何驗證錯誤,以便在出現驗證錯誤時避免提交表單。

因此,我提出了一種替代方法,而不是解決方案/修復您的確切問題,因爲我認爲目前的模型可能會很麻煩。

爲什麼不在表單提交時執行所有字段驗證而不是字段模糊,然後在任何字段出現驗證錯誤時阻止提交?

+0

在我的實現中,我正在驗證'submit'和'blur'上的輸入字段。我認爲,僅在提交時驗證輸入字段不是很好的用戶交互。但是,無論如何,謝謝你的建議。 – ankakusu

0

根據在this answer中告訴我的內容,我帶來了這個解決方案。收聽blur之前觸發的mousedown事件,並檢查用戶是否可以根據錯誤消息是否可見提交表單。

form.on('mousedown','input[type="submit"]', function(e) { 
    if(!errorMsg.hasClass("hidden")){ 
    e.preventDefault(); 
    alert("Can't submit until the error message is gone"); 
    } 
}); 

我已更新您的CodePen

+0

這是一個解決方法,@Ates Goral釘住了它。 –

+0

我看到了類似的解決方法。就目前而言,我正在深入挖掘以尋找更好的解決方案。但是謝謝你的注意! – ankakusu