我有一個帶有onchange事件的文本框。爲什麼當用戶使用自動填充功能填充文本框時,此事件不會觸發?爲什麼javascript onchange事件在自動完成時不會觸發?
我正在使用Internet Explorer。有沒有一種標準的和相對簡單的解決方案來解決這個問題,而不必禁用自動完成功能?
我有一個帶有onchange事件的文本框。爲什麼當用戶使用自動填充功能填充文本框時,此事件不會觸發?爲什麼javascript onchange事件在自動完成時不會觸發?
我正在使用Internet Explorer。有沒有一種標準的和相對簡單的解決方案來解決這個問題,而不必禁用自動完成功能?
上次我遇到這個問題時,我最終使用了Internet Explorer的onpropertychange
事件。我讀了關於here on MSDN:這是推薦它的方法。
我以前遇到過這個令人討厭的功能,當時我的解決方案是使用onfocus事件來記錄文本框的當前值,然後使用onblur事件來檢查當前值是否與值相匹配在聚焦期間保存。例如
<input type="text" name="txtTest" value="" onfocus="this.originalvalue=this.value" onblur="if (this.value != this.originalvalue) alert('Test has changed')"/>
這發生在我最新版本的Chrome中,很明顯,它不是IE特定的東西。 'onblur`解決了我的問題。 – DanO 2011-09-20 00:01:04
我剛打開自動完成關閉的文本框,我需要觸發一個文本改變事件
'Turn off Auto complete
'(it needs to fire the text change event)
txtYourTextBox.Attributes.Add("AutoComplete", "off")
只要把在頁面加載。
或者,您可以將屬性添加到您的標記中的input
元素或整個form
上:
<input type=text autocomplete=off>
或
<form autocomplete=off>
我剛剛發現using jQuery 1.4 to set change event可以解決這個問題。如果你已經熟悉jQuery,這個問題似乎是最簡單的解決方案。
大廈蒂姆·C'S答案,這裏是我想出了一個簡單的jQuery來處理這對頁面上的所有文本框:
$("input[type=text]").bind("focus change",function(){
this.previousvalue = this.value;
}).blur(function(){
if (this.previousvalue != this.value){
$(this).change();
}
})
如果你不關心的onchange射擊多次,你可以把它簡單:
$("input[type=text]").blur(function(){
$(this).change();
})
我發現下面的jQuery(V1.10 +)JavaScript並在文本是自動完成HTML文本輸入字段的情況下工作。這是測試,以可靠地至少在Safari 6.1.1的工作在Mac OS X 10.8.5,但應在其他兼容的瀏覽器工作也:
$("input:text[id=text_field_id]").bind("focus change keyup blur", function(event) {
// handle text change here...
});
似乎添加blur
事件處理程序是關鍵儘管其他事件處理程序有助於確保在文本更改時隨時調用事件處理程序,無論是由於瀏覽器自動完成功能的編輯還是新輸入。
只需更換上面您想要的文字輸入領域的相關選擇的"input:text[id=text_field_id]"
代碼,如果使用id
屬性是指你的領域,更換text_field_id
與文本字段的id
屬性值。
但它似乎每次用戶按下一個鍵時會觸發。我在這裏做錯了什麼? – Preets 2008-12-05 09:32:10
不幸的是它是如何工作的。 但我只是發現這個資源,這似乎解決了一個很好的方式問題:http://jehiah.cz/archive/onchange-and-autocomplete – 2008-12-05 09:41:47
注意:onpropertychange不再似乎在IE9中可靠地工作,至少在我的測試中。 – 2011-11-23 21:46:39