2012-04-04 58 views
1

我有以下的html代碼:的preventDefault不工作的第二次點擊

<div> 
    <span>Products per page:</span> 
    <a class="selectview" href="/womens-clothing/shorts?page=1&view=20">20</a> 
    <a class="selectview" href="/womens-clothing/shorts?page=1&view=200">200</a> 
<div> 

和jQuery是如下:

jQuery('.selectview').click(function (ev) { 

    ev.preventDefault(); 

    var alink = jQuery(this).attr('href'); 

    var view = getLinkVars(alink)["view"]; 
    var page = jQuery("#currentpageno").val(); 

    alert(alink); 
    alert(view); 
    alert(page); 

    run_ajax(view,page); 


}); 

的代碼運行正常第一次,如果我點擊任何的鏈接;我看到警報和ajax代碼運行良好,但是當我第二次點擊它時,整個頁面都會刷新,並且不會顯示警報。然後,如果我再次點擊它,它會起作用,然後當我再次點擊它時,它會起作用,依此類推。

我會做什麼錯?

+0

不知道,但我想你應該張貼的代碼爲您getLinkVars功能藏漢?還要檢查控制檯是否有錯誤,不知何故preventDefault不會觸發,可能是因爲代碼中存在一些錯誤。 – adeneo 2012-04-04 18:07:28

回答

6

我的猜測是run_ajax正在取代新的鏈接。 .click僅綁定到當時與選擇器匹配的元素。新添加的鏈接不會有綁定到它們的點擊事件。

您需要使活動「活」。他們綁定使用.on像這樣:

jQuery(document).on('click', '.selectview', function (ev) { 
    ev.preventDefault(); 
    // code... 
}); 

這將「代表」的事件。無論何時將它們添加到DOM,它都將運行於所有.selectview鏈接。

+0

就像'.live'('click',function(ev){})''這種比較常用的語法一樣簡單,而不是稍微不太流行的'.on'語法。基本上必須對點擊事件進行動態綁定,而不是靜態綁定。 – Mattygabe 2012-04-04 18:17:34

+3

@Mattygabe:'.live'常用於* jQuery 1.7之前。在jQuery 1.7+中,'.live',以及'.bind'和'.delegate'都被棄用了。 jQuery建議你爲所有的事件綁定需求使用'.on'。一旦人們升級他們的代碼,'.on'應該更加「流行」。 – 2012-04-04 18:19:44

+0

很高興知道 - 謝謝! – Mattygabe 2012-04-04 18:21:45

0

如果run_ajax替換的鏈接,您可以換,重視你的點擊處理程序的代碼,然後裏面run_ajax可以撥打包裝你已經替換爲新內容中的鏈接後:

var setupClickHandlers = function(container) { 
    jQuery(container).find('.selectview').click(function (ev) { 

     ev.preventDefault(); 

     var alink = jQuery(this).attr('href'); 

     var view = getLinkVars(alink)["view"]; 
     var page = jQuery("#currentpageno").val(); 

     alert(alink); 
     alert(view); 
     alert(page); 

     run_ajax(view,page); 
    }); 
}; 
setupClickHandlers(container); 

的在run_ajax:

var run_ajax = function(view, page) { 
    // do your stuff here 

    // set up click handlers on the new content 
    setupClickHandlers(container); 
} 
+0

謝謝你的回答,我使用了Mattygabe的解決方案,而且工作完美。謝謝:) – Amara 2012-04-04 18:34:37

+0

Ooops我的意思是Rocket的回答:) – Amara 2012-04-04 18:42:44