2015-02-04 23 views
0

對於我的一個表單,我收到錯誤「名稱='收集器'的無效表單控件不可聚焦」。我也明白爲什麼,因爲它被一些JS-lib隱藏了,而且我已經知道傳播這個「問題」的解決方法。我的問題是另一種:捕獲事件或異常「無效的表單控件」

這個消息是異常事件的一部分,還是我可以輕鬆聽到的事件,而只是做「事情」呢?或者,我可以做的唯一事情就是覆蓋底層表單的提交事件並自行檢查一下事情嗎?

我寧願避開後者,讓瀏覽器完成這項工作,如果他們能夠打印到控制檯,我可能會有機會以某種方式攔截瀏覽器的知識,並且只在已知的情況下做某些事情這是必要的。

好像我正在尋找像Is there a way in JavaScript to listen console events?之類的東西,但也許有一些特殊的事件在表單驗證等錯誤,這是更官方和少hacky。

回答

0

看起來像答案比預期的更容易:使用普通的jQuery,你可以簡單地綁定到具有「required」屬性的輸入上的「無效」事件,似乎總是被觸發,無論輸入是否可見。

self.element.bind('invalid', function(event) { alert('collectors'); }); 
$('input[type="file"]').bind('invalid', function(event) { alert('file'); }); 

在我的情況「收藏家」是一個隱藏的文本輸入時,它沒有任何價值的事件觸發,我想提交表單。另一個有趣的事情是,至少Chrome似乎首先集中了所有其他已經可見的必需輸入,而沒有任何有效值,因爲如果我手動將某些元素集中到「收集器」事件處理程序中,它似乎被忽略,直到文件輸入這是Chrome自動關注的一個值。

什麼似乎沒有工作是使用window.onerror或console.error篩選消息Chrome輸出在其dev控制檯中。那些根本不會被調用,我猜錯誤消息不會傳遞JS,而是直接來自瀏覽器內部的錯誤。