當然,我們可以抱著寧可錯殺一百,不可錯放一個的精神來個$("input:text").attr("autocomplete", "off"),把網頁上所有<input type='text'>的自動完成功能全都閹掉,一了百了。不過,我習慣處理得細膩一點,將這個不得已措施的範圍縮小到受影響的欄位上,換句話說,只有掛了onchange事件的<input type='text'>才是要撲殺的對象。
//針對有掛onchange的<input type="text">設定autocomplete="off"
//參考: http://tinyurl.com/yzwp3lt
//限制: 只對執行當下已經掛載onchange事件者有效(不包含.live()掛載者)
$.fn.disableAutoCompleteForChange = function(force) {
//過濾只留下<input type='text'>
return this.filter(":text").each(function() {
//篩選有掛change事件者, 參考: http://tinyurl.com/yka6x8g
var evts = $.data(this, "events");
if (force || evts && evts["change"] || this.onchange != undefined)
$(this).attr("autocomplete", "off");
//.val("SET"); //可加上這段測試是否被設定
});
}
//加入三個<input>進行測試, T2用jQuery掛onchange, T3直接宣告onchange
$("body").append("<input id='T1' /><input id='T2' />")
.append("<input id='T3' onchange='alert(3);' />");
$("#T2").change(function() { alert("2"); });
$("input").disableAutoCompleteForChange();