Ajax 板


LINE

屋 其實我也被打過臉 說真的出來說嘴只是想賺文章數這樣 ※ 引述《sk1765 (鼎玉鉉)》之銘言: : ※ 引述《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').onclick=function(){};" value="C"> : <input type="button" onclick="$('#id1').onclick=function() { : alert('334455'); }" "value="RE"> 這裡取出來的是jQuery物件 不能直接套上.onclick屬性 很多很方便取出HTML物件的framework都會直接包成一個特定的Object 因為你不可能在HTML Node上新增如.attr()等的屬性、函式 所以jQuery就將他打包成jQuery物件 使它可以支援一堆功能 然而有時總是會遇到必須取得原始Node的情況 這時只要把它當作一個陣列 也就是jQuery把match到的所有node都存入這個陣列中 所以要取得第一項就是$(selector)[0]這樣 不過這邊稱他為陣列也不太對 應該說是物件 或說關聯陣列 javascript在這邊本來就是有著複雜的關係 jQuery本身程式碼 因為小弟才疏學淺沒有研究 所以也不知道到底是哪種 不過應該是物件沒錯... 所以這邊正確寫法是$('#id1')[0].onclick=function(){}; 如果很不幸的 match到不只一個 而且必須每個元件都要執行後面的動作 那就剛好可以呼叫jQuery內建的.each()函式 $(selector).each(function(i, obj) { ... 傳進來的obj就是原始的Node 不是jQuery物件 所以可以直接呼叫.onclick屬性 i是代表第幾項 ) : 不用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"> : 也就是直接用Javascript property映射就好啦 : 不能用W3C的方法 : 在inline event handler裏寫 匿名函式要注意會形成closure的效果 請小心使用 : <input id="btn1" type="button" onclick="document.getElementById('id1'). : onclick=function () { : alert('334455'); : }" : value="set new onclick"> 拍謝 這裡我也看不懂... : 翻回傳統註冊法就會變成 : var x = document.getElementById('btn1'); : x.onclick = function () { : document.getElementById('id1').onclick = function () { : alert('334455'); : } 其實這樣跟行內註冊沒啥差耶... 只有美醜的差別而已 正確來說應該呼叫W3C的addEventListener 然後要刪掉就要呼叫removeEventListener 當然匿名函式要怎麼刪掉是個問題 所以應該這樣寫 var obj = document.getElementById('id'), f = function () { alert('test'); }; obj.addEventListener('click', f, true);//第三個參數是要不要觸發上一層Node的事件 obj.removeEventListener('click', f, true); 範例: http://jsfiddle.net/5DgfQ/1/ 忘了說...這裡有瀏覽器相容性問題 至於是哪款..大家都知道我就不搬出來鞭了 : } : -------------------------------------------- : 另外在jQuery中使用 : $('#id1')[0].click(function(){ : alert('334455'); : }); : $('#id1')[0].bind('click', function(){ : alert('334455'); : }); 都說將元素取出陣列就不是jQuery物件了 當然無法呼叫.click()或.bind() : 這些都是利用進階模式 註冊事件 : 也就是透過addEventListener 和 attachEvent完成的 : 這兩者的第一個參數都是事件名稱繫結 事件名稱在javascript中和 : javascript property的使用又不相同 利用這兩者具有附加的效果而非取代效果 : 所以在取消時 必須用 unclick ,unbind 否則新的click只是附加動作 : 同時利用進階模式來取消 無法移除傳統註冊以及行內註冊事件 : <input type="button" id="id1" onclick="alert('001122');" value="alert"> : <input type="button" onclick="$('#id1')[0].unclick();" value="C"> //->不生效? 阿又沒有unclick可以讓你叫... 應該要用unbind jQuery API Refrence:http://api.jquery.com/unbind/ 用法差不多同上 範例: http://jsfiddle.net/5DgfQ/2/ 不過對於onclick行內註冊綁上去的function 是不能透過.unbind()去掉的 至少我剛剛試是這樣 : <input type="button" onclick="$('#id1')[0].click(function(){alert('334455');});" : value="RE"> //->無法附加event handler? : <input type="button" onclick="$('#id1')[0].click(function(){});" value="C"> : 應該是不行的 因為他是附加動作不是覆蓋動作 : 同時在jQuery中使用 $('#id1')[0].click(); 很容易讓人迷惘 : 因為在javascript中 他明明是 事件模擬(event simulation) : 但是到了Jquery中變成繫結方法 : 所以如果不傳參數 是否就是事件模擬 : 而他的事件模擬 是否有修正javascript中只對表單欄位動作的問題則不確定 : 結論 行內註冊建議還是用javascript property mapping的方式來取代原來的handler --
1F:→ s25g5d4:五樓是甲甲 12/11 19:59
2F:→ s25g5d4:我..推錯篇了 12/11 19:59
3F:→ sherwinc:XD12/11 19:59
4F:→ pp1877:喔XD12/11 20:00
5F:推 victory55:5樓甲甲喜歡拿按摩棒自己搓自己小菊花12/11 20:01
6F:→ victory55:........可以修文嗎12/11 20:01
--



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.116.108.169 addEventListener後面註解打錯了 應為第三個不是第二個... ※ 編輯: s25g5d4 來自: 59.116.108.169 (01/29 22:26) 另外說明一下為甚麼不能寫obj.onclick = f(a,b); 當瀏覽器讀取到f時他會認得他是一個function 之後接上()造成他被觸發(執行) 所以到那邊不管三七二十一都會跑一次 然後勒? onclick綁上去的將會是f(a,b)的傳回值 如果很不幸的 傳回的是null 那就是onclick沒有綁任何東西上去 一個簡單的範例就是 var f=function () { alert('test'); return function () {alert('test2');}; }; obj.onclick = f(); obj2.onclick = f; http://jsfiddle.net/5DgfQ/3/ ※ 編輯: s25g5d4 來自: 59.116.108.169 (01/29 22:34) ※ 編輯: s25g5d4 來自: 59.116.108.169 (01/29 22:44) 夭壽...each的參數寫反了 ※ 編輯: s25g5d4 來自: 59.116.108.169 (01/30 00:24)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP