2016-02-27 35 views
0

我遇到了一個非常模糊的,看似錯誤,並希望記錄它爲後人。事情是這樣的:jQuery的.hide(變化事件)或.show()抑制表單提交

我顯示一個HTML形式提供給用戶與許多文本字段和在底部的提交按鈕。在提交按鈕之上是一條警告消息,該消息出現或消失取決於用戶是否填寫了所有必需的信息。在測試過程中(自動使用Capybara,或在瀏覽器中手動),我填寫頁面中的每個字段,然後單擊提交按鈕,但第一次單擊不會註冊。 A 點擊按預期提交表單。

我發現,如果我禁用我的自定義JavaScript,不需要第二次點擊。經過一些排除過程後,我確定有一個Jquery系列產品對此失敗負責:$(‘#warning-message’).hide();。註釋掉這一行,然後按預期填寫和提交表單。重新啓用此行,表單提交需要額外的點擊。什麼frak?

回答

0

我最終發現這是因爲在手動測試和Capybara-webkit模擬時,當你點擊提交按鈕等元素時,它被註冊爲屏幕上特定的X/Y座標。你沒有點擊DOM元素,你點擊了一個座標。因爲(懶惰)方式,我建立這個頁面,當我填寫所有需要的元素,然後點擊提交,在點擊提交按鈕一個jQuery change事件被觸發導致$(‘#warning-message’).hide();,這反過來又導致提交按鈕在我點擊的區域之外跳到,所以提交事件從不首先被觸發,因爲瀏覽器沒有意識到我點擊了一個按鈕。

我還是不太清楚是怎麼打的這一點,但它絕對不是瀏覽器事件是如何處理本身的錯誤,這麼多​​的誤解(對我而言)。我已經通過將警告div包裝在固定高度的容器中解決了這個問題,所以不相關的Jquery更改事件不會導致提交按鈕跳轉。

無論如何,我希望這可以幫助別人。