Re: [問題] jquery attr onclick IE7 & 8
※ 引述《gaekeamql (芋頭)》之銘言:
: 問一下
: <input type="button" id=1 onclick="alert('001122');" value="alert">
: <input type="button" onclick="$('#1').attr('onclick','');" value="C">
: <input type="button" onclick="$('#1').attr('onclick','alert(\'334455\');');"
: value="RE">
: 此動作在OPREA OK 但是在IE 清除候 再輸入
: $('#1').attr('onclick','alert(\'001122\');'); 卻是沒反應的
: 但是 是有把 oncilck="alert('334455');" 寫進去 但是不會動作
attr()這個方法 應該是用W3C DOM的屬性方法 setAttribute()寫成的
在ppk on Javascript一書第8-G節 有詳細的警告 我把它節錄如下:
------------------------------------------------------------
很多HTML標籤用特定的屬性去保存行內樣式(inline style)和
行內事件處理常式(inline event handler)如 onclick,onkeydown等
在IE中,這些屬性不能透過getAttribute()和setAttribute()來讀寫;
事實上,如果你嘗試這麼做你會遇到怪異的bug
解決的辦法是使用Javascript屬性(Javascript property)
style,onclick,onkeydown等來讀寫這些屬性
為了完全明白這一點,先來探討 HTML屬性(HTML attributes) 和
javascript 屬性(javascript property)有何區別
至於 HTML屬性(HTML attributes) 和 javascript 屬性(javascript property)
以及屬性映射 我就不打了
麻煩請自行參閱ppk on Javascript中文版8-G 圖書館就有
全部打字太累了把 讀寫屬性的最佳方式 看完你就會了解啦
------------------------------------------------------------
以下是解答
<input type="button" id="id1" onclick="alert('001122');" value="alert">
<input type="button" onclick="$('#id1')[0].onclick=function(){};" value="C">
<input type="button" onclick="$('#id1')[0].onclick=function() {
alert('334455'); }" "value="RE">
http://jsfiddle.net/6n4sr/4/
不用famework直接寫如下
<input type="button" id="id1" onclick="alert('001122');" value="alert">
<input type="button" onclick="document.getElementById('id1').
onclick=function() {};" value="set onclick null">
<input type="button" onclick="document.getElementById('id1').
onclick=function() { alert('334455'); }" value="set new onclick">
http://jsfiddle.net/6n4sr/5/
也就是直接用Javascript property映射就好啦
不能用W3C的方法
--------------------------------------------
另外在jQuery中使用
$('#id1').click(function(){
alert('334455');
});
$('#id1').bind('click', function(){
alert('334455');
});
這些都是利用進階模式 註冊事件
也就是透過addEventListener 和 attachEvent完成的
這兩者的第一個參數都是事件名稱繫結 事件名稱在javascript中和
javascript property的使用又不相同 利用這兩者具有附加的效果而非取代效果
所以在取消時 必須用 unclick ,unbind 否則新的click只是附加動作
同時利用進階模式來取消 無法移除傳統註冊以及行內註冊事件
<input type="button" id="id1" onclick="alert('001122');" value="alert">
<input type="button" onclick="$('#id1').unclick();" value="C1"> //->不生效
<input type="button" onclick="$('#id1').unbind('click');" value="C2">//->不生效
<input type="button" onclick="$('#id1').click(function(){alert('334455');});"
value="RE"> //->可以附加event handler
http://jsfiddle.net/6n4sr/15/
<input type="button" onclick="$('#id1').click(function(){});" value="C">
是不行的 因為他是附加動作不是覆蓋動作
同時在jQuery中使用 $('#id1').click(); 很容易讓人迷惘
因為在javascript中 他明明是 事件模擬(event simulation)
但是到了jQuery中變成繫結方法
所以如果不傳參數 是否就是事件模擬
而他的事件模擬 是否有修正javascript中只對表單欄位動作的問題則不確定
結論
1.行內註冊和傳統註冊建議還是用javascript property mapping的方式
來取代原來的handler 和移除
沒辦法用 removeEventListener() 和 detachEvent()移除
bind和unbind 都是用addEventListener 和 removeEventListener() 寫成的
所以也沒辦法移除行內註冊
2.在jQuery中 只用bind('click',xxx) 和 unbind('click',xxx)的寫法
來替代click()和unclick() 以避免不經意的變成事件模擬
3.其實很多問題都是來自於後繼者不想更動原來的網頁和js程式碼
因此直接在網頁上寫inline註冊事件 但是卻沒有了解inline註冊的意義
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.73.175.237
※ 編輯: sk1765 來自: 203.73.175.237 (01/29 15:36)
→
01/29 18:57, , 1F
01/29 18:57, 1F
推
01/29 19:01, , 2F
01/29 19:01, 2F
→
01/29 19:23, , 3F
01/29 19:23, 3F
→
01/29 20:08, , 4F
01/29 20:08, 4F
→
01/29 20:09, , 5F
01/29 20:09, 5F
→
01/29 20:09, , 6F
01/29 20:09, 6F
→
01/29 20:10, , 7F
01/29 20:10, 7F
→
01/29 20:10, , 8F
01/29 20:10, 8F
→
01/29 20:11, , 9F
01/29 20:11, 9F
→
01/29 20:11, , 10F
01/29 20:11, 10F
→
01/29 20:12, , 11F
01/29 20:12, 11F
→
01/29 20:12, , 12F
01/29 20:12, 12F
→
01/29 20:14, , 13F
01/29 20:14, 13F
→
01/29 20:14, , 14F
01/29 20:14, 14F
→
01/29 20:15, , 15F
01/29 20:15, 15F
→
01/29 20:15, , 16F
01/29 20:15, 16F
→
01/29 20:17, , 17F
01/29 20:17, 17F
→
01/29 20:21, , 18F
01/29 20:21, 18F
→
01/29 20:22, , 19F
01/29 20:22, 19F
→
01/29 20:22, , 20F
01/29 20:22, 20F
→
01/29 20:23, , 21F
01/29 20:23, 21F
→
01/29 20:23, , 22F
01/29 20:23, 22F
→
01/29 20:26, , 23F
01/29 20:26, 23F
→
01/29 20:28, , 24F
01/29 20:28, 24F
→
01/29 20:31, , 25F
01/29 20:31, 25F
→
01/29 20:32, , 26F
01/29 20:32, 26F
→
01/29 20:36, , 27F
01/29 20:36, 27F
→
01/29 20:37, , 28F
01/29 20:37, 28F
→
01/29 20:38, , 29F
01/29 20:38, 29F
→
01/29 20:38, , 30F
01/29 20:38, 30F
→
01/29 20:38, , 31F
01/29 20:38, 31F
→
01/29 20:38, , 32F
01/29 20:38, 32F
→
01/29 20:39, , 33F
01/29 20:39, 33F
→
01/29 20:39, , 34F
01/29 20:39, 34F
→
01/29 20:40, , 35F
01/29 20:40, 35F
→
01/29 20:41, , 36F
01/29 20:41, 36F
→
01/29 20:41, , 37F
01/29 20:41, 37F
→
01/29 20:43, , 38F
01/29 20:43, 38F
→
01/29 20:44, , 39F
01/29 20:44, 39F
→
01/29 20:45, , 40F
01/29 20:45, 40F
→
01/29 22:27, , 41F
01/29 22:27, 41F
→
01/29 22:28, , 42F
01/29 22:28, 42F
※ 編輯: sk1765 來自: 61.59.10.91 (01/30 11:21)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 7 篇):
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章