另外還提到一個(gè) jquery 的插件 easydrag,這個(gè)插件處理拖放還算好用,但自從我上次修改后,現(xiàn)在又發(fā)現(xiàn)了它的另一個(gè) bug. 在應(yīng)用了 easydrag 的頁面中,某種情況下會(huì)在頁面加載時(shí)出現(xiàn)“找不到對象”的腳本錯(cuò)誤。經(jīng)過仔細(xì)檢查,發(fā)現(xiàn)問題在于 easydrag 中過早的綁定了 document 的 mousemove 和 mouseup 事件,而有時(shí)候腳本加載的時(shí)候 document 還沒有 ready, 自然就會(huì)“找不到對象”了。 新疆軟件開發(fā)網(wǎng)整理 http://m.jdtbank.com
解決問題的辦法很簡單,我們推遲這兩個(gè)事件的綁定即可:
function mousemove_handler(e){ // }
function mouseup_handler(e){ // // 解除鼠標(biāo)移動(dòng)和彈起事件的處理函數(shù)綁定 $(document).unbind("mousemove", mousemove_handler).unbind("mouseup", mouseup_handler); }
$("#拖動(dòng)目標(biāo)").mousedown(function(){ // // 添加鼠標(biāo)移動(dòng)和彈起事件的處理函數(shù)綁定 $(document).mousemove(mousemove_handler).mouseup(mouseup_handler); })
注意上面代碼中 unbind 事件也是很必要的。
另外推薦一個(gè)很好的 jquery 插件 —— background iframe. 以前我們寫網(wǎng)頁中的日歷控件之類的,為了遮住 <select> (IE 6.0 或以下),一般都是用一個(gè)
<div> <iframe></iframe> </div> 來加載彈出的內(nèi)容。但是這樣有個(gè)問題,就是加載的文檔和當(dāng)前文檔不是一個(gè)頁面,那么在 asp.net 等后臺(tái)代碼里,就不是很方便做數(shù)據(jù)綁定,因?yàn)槎嗔艘粋(gè)頁面,就需要多出很多不必要的變量傳遞工作。
而 background iframe 的原理是,你可以在當(dāng)前頁面的 <div></div> 里直接寫彈出內(nèi)容,它負(fù)責(zé)動(dòng)態(tài)的在這個(gè) div 中插入一個(gè)透明的 iframe 作為背景的遮罩,這樣也一樣能達(dá)到遮擋 <select> 的效果。 調(diào)用方式也非常簡單:
$("#some_layer").bgiframe(); 這樣就可以了。
這里聯(lián)想到,編程真的是思路最重要。記得以前看 meizz 的日歷控件代碼,通過 iframe 的方式寫入,實(shí)現(xiàn)很復(fù)雜,現(xiàn)在如果換了 background iframe 這個(gè)思路,問題很簡單就解決了。
|