新手常遇到的一些jquery問題整理
更新時間:2010年08月16日 16:03:40 作者:
最近在做項目的時候使用了Jquery~新手學(xué)習(xí)jquery.~遇到了一些"奇怪"的問題(各位大神別拍磚).感謝ClassYuan老大的支持
ClassYuan的blog.http://www.classyuan.com/.下面列舉一些:
1.跟HTML元素加載事件的時候,會在加載的時候同時執(zhí)行該事件。
錯誤代碼:
正確代碼
我在這段代碼,忽略了Bind這個方法.Api的解釋是bind(type,[data],fn)
我錯誤的講fn當(dāng)做一個簡單的function..導(dǎo)致這段代碼會在加載的時候執(zhí)行一次這個fn..
這是一個書寫格式的疏忽.希望知道原因的大神可以指點。
2變量作用域的問題.(貌似這個不是jquery的問題.而是js跟.net的區(qū)別..)
這個函數(shù).我想讓他alert出相應(yīng)的id..結(jié)果..答案很同意..3個<a>標(biāo)簽的函數(shù)..彈出來都是3..
看了一下..明白了
變量作用域的問題,傳個tes函數(shù)的參數(shù)是循環(huán)結(jié)束后i的值,所以全部是3。
這一點似乎和.net不一樣。
最后接解決方案- -..直接吧$(this)傳遞進去了
3.事件執(zhí)行順序的問題
給這個圖片綁定了onclick事件,事件的內(nèi)容是給<img>標(biāo)簽的parent增加一個href屬性.
但是事件執(zhí)行完畢之后,將會直接跳轉(zhuǎn)到a標(biāo)簽的鏈接。經(jīng)過分析.
應(yīng)為click是在href之前執(zhí)行的,也就是當(dāng)點擊圖片的時候A標(biāo)簽已經(jīng)有了href,然后同時又觸發(fā)了A標(biāo)簽.
解決方案..去掉<img>外層的a標(biāo)簽..然后修改事件
以上是我這個新手第一次使用jquery所遇到的問題..留在這里.當(dāng)做成長的歷程..各位大神老鳥..別噴吖..
第一個問題
$('#btnLoad').bind('click', GetProduct);
記住,綁定事件是綁一個函數(shù)上去,而GetProduct(),帶了括號以后,得到的是這個函數(shù)的返回值。而你的GetProduct的返回值明顯不是個函數(shù)
$("#btnLoad").bind("click",GetProduct());
改為:
$("#btnLoad").bind("click",GetProduct);
試試。
GetProduct() 是執(zhí)行一個函數(shù),然后返回值,但是返回的值并非 fn 類型。
第二個問題
其實.NET里也有,這是閉包的問題,在閉包中得到的是i變量的地址,而i不斷在變,因此訪問這個地址后的獲得的值也一直在變,所以所有的tes都用了i這個變量最后的值,就是3
這個問題用如下方法解決(我簡化下代碼):
for (var i = 0; i < 3; i++) {
(function(i) {
$('<a>刪除</a>').appendTo('.div_list').bind('click', function() { tes(i); });
})(i);
}
如果你無法理解這么寫的原理,沒關(guān)系,先記住這個形式,以后遇上類似的問題就按這個思路去寫,也就是外面套一層(function() { xxx })();
說到原畫,其實很簡單,通過函數(shù)的時候,i作為基本類型變量是按值傳遞的,也就是說會把當(dāng)前的i的值復(fù)制一份值到這個函數(shù)中,因此每一次調(diào)用這個匿名函數(shù)的時候,i都是相互獨立的,不會受外層for的影響
第三個問題
當(dāng)a沒有給href屬性時,href則默認(rèn)為當(dāng)前頁的址,所以你點擊后就會跳轉(zhuǎn)。所以網(wǎng)上流行的處理方式有以一下幾種
1.<a href="###">dfa</a>
2.<a href="javascript:void();">dfa</a>
3.<a href="javascript:;">dfa</a>
1.跟HTML元素加載事件的時候,會在加載的時候同時執(zhí)行該事件。
錯誤代碼:
復(fù)制代碼 代碼如下:
$("#btnLoad").bind("click",GetProduct());
正確代碼
復(fù)制代碼 代碼如下:
$("#btnLoad").bind("click", function() { GetProduct() });
我在這段代碼,忽略了Bind這個方法.Api的解釋是bind(type,[data],fn)
我錯誤的講fn當(dāng)做一個簡單的function..導(dǎo)致這段代碼會在加載的時候執(zhí)行一次這個fn..
這是一個書寫格式的疏忽.希望知道原因的大神可以指點。
2變量作用域的問題.(貌似這個不是jquery的問題.而是js跟.net的區(qū)別..)
復(fù)制代碼 代碼如下:
function text() {
2 for (var i = 0; i < 3; i++) {
3 $("<a>刪除</a>").attr({ id: "hr_" + i, href: "javascript:;" }).addClass("btnCss").bind("click", function() { tes(i) }).appendTo(".div_list");
4 }
5 }
6 function tes(id) {
7 alert(id);
8 }
2 for (var i = 0; i < 3; i++) {
3 $("<a>刪除</a>").attr({ id: "hr_" + i, href: "javascript:;" }).addClass("btnCss").bind("click", function() { tes(i) }).appendTo(".div_list");
4 }
5 }
6 function tes(id) {
7 alert(id);
8 }
這個函數(shù).我想讓他alert出相應(yīng)的id..結(jié)果..答案很同意..3個<a>標(biāo)簽的函數(shù)..彈出來都是3..
看了一下..明白了
變量作用域的問題,傳個tes函數(shù)的參數(shù)是循環(huán)結(jié)束后i的值,所以全部是3。
這一點似乎和.net不一樣。
最后接解決方案- -..直接吧$(this)傳遞進去了
3.事件執(zhí)行順序的問題
復(fù)制代碼 代碼如下:
<a target="_blank" title="Iphone" >
2 <img id="proImg7_2" src="" alt="Iphone" style="width:70px; height:60px; border:none;" />
3 </a>
2 <img id="proImg7_2" src="" alt="Iphone" style="width:70px; height:60px; border:none;" />
3 </a>
給這個圖片綁定了onclick事件,事件的內(nèi)容是給<img>標(biāo)簽的parent增加一個href屬性.
但是事件執(zhí)行完畢之后,將會直接跳轉(zhuǎn)到a標(biāo)簽的鏈接。經(jīng)過分析.
應(yīng)為click是在href之前執(zhí)行的,也就是當(dāng)點擊圖片的時候A標(biāo)簽已經(jīng)有了href,然后同時又觸發(fā)了A標(biāo)簽.
解決方案..去掉<img>外層的a標(biāo)簽..然后修改事件
復(fù)制代碼 代碼如下:
idwrap('<a );
以上是我這個新手第一次使用jquery所遇到的問題..留在這里.當(dāng)做成長的歷程..各位大神老鳥..別噴吖..
第一個問題
$('#btnLoad').bind('click', GetProduct);
記住,綁定事件是綁一個函數(shù)上去,而GetProduct(),帶了括號以后,得到的是這個函數(shù)的返回值。而你的GetProduct的返回值明顯不是個函數(shù)
$("#btnLoad").bind("click",GetProduct());
改為:
$("#btnLoad").bind("click",GetProduct);
試試。
GetProduct() 是執(zhí)行一個函數(shù),然后返回值,但是返回的值并非 fn 類型。
第二個問題
其實.NET里也有,這是閉包的問題,在閉包中得到的是i變量的地址,而i不斷在變,因此訪問這個地址后的獲得的值也一直在變,所以所有的tes都用了i這個變量最后的值,就是3
這個問題用如下方法解決(我簡化下代碼):
for (var i = 0; i < 3; i++) {
(function(i) {
$('<a>刪除</a>').appendTo('.div_list').bind('click', function() { tes(i); });
})(i);
}
如果你無法理解這么寫的原理,沒關(guān)系,先記住這個形式,以后遇上類似的問題就按這個思路去寫,也就是外面套一層(function() { xxx })();
說到原畫,其實很簡單,通過函數(shù)的時候,i作為基本類型變量是按值傳遞的,也就是說會把當(dāng)前的i的值復(fù)制一份值到這個函數(shù)中,因此每一次調(diào)用這個匿名函數(shù)的時候,i都是相互獨立的,不會受外層for的影響
第三個問題
當(dāng)a沒有給href屬性時,href則默認(rèn)為當(dāng)前頁的址,所以你點擊后就會跳轉(zhuǎn)。所以網(wǎng)上流行的處理方式有以一下幾種
1.<a href="###">dfa</a>
2.<a href="javascript:void();">dfa</a>
3.<a href="javascript:;">dfa</a>
相關(guān)文章
把html頁面的部分內(nèi)容保存成新的html文件的jquery代碼
把html頁面的部分內(nèi)容保存成新的html文件,用到了jquery的獲取指定id的內(nèi)容。然后保存代碼。2009-11-11
jQuery+ajax實現(xiàn)無刷新級聯(lián)菜單示例
這篇文章主要介紹了jQuery+ajax實現(xiàn)無刷新級聯(lián)菜單示例,代碼很完整,也非常實用,有需要的小伙伴可以參考下。2015-05-05
jquery如何改變html標(biāo)簽的樣式(兩種實現(xiàn)方法)
對于如何修飾html標(biāo)簽,這對于js來說,可以通過setAttribute來設(shè)置標(biāo)簽的屬性,通過getAttribute來得到標(biāo)簽的屬性,而在jq中當(dāng)然也可以實現(xiàn)類似的功能,方法上肯定比js要簡化多了,接下來介紹實現(xiàn)方法,感興趣的朋友可以了解下2013-01-01
鋒利的jQuery 要點歸納(三) jQuery中的事件和動畫(下:動畫篇)
《鋒利的jQuery》要點歸納(三) jQuery中的事件和動畫(下:動畫篇)2010-03-03
Jquery修改image的src屬性,圖片不加載問題的解決方法
下面小編就為大家?guī)硪黄狫query修改image的src屬性,圖片不加載問題的解決方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧2016-05-05

