2013-09-25 42 views
0

我有這個代碼的偉大工程,如果<一個>放在外面的< DIV ID =「列表」 >但不是當鏈接被放置在目標專區內。 event.preventDefault()甚至沒有被觸發。任何幫助將不勝感激。謝謝!jQuery的AJAX實時更新​​問題

<script> 
    $(document).ready(function() { 
     $(".category_link").on('click' ,function() { 
      event.preventDefault(); 
      var addressValue = $(this).attr("href"); 
      function getUrlVars() 
      { 
       var vars = [], hash; 
       var hashes = addressValue.slice(addressValue.indexOf('?') + 1).split('&'); 
       for(var i = 0; i < hashes.length; i++) 
       { 
        hash = hashes[i].split('='); 
        vars.push(hash[0]); 
        vars[hash[0]] = hash[1]; 
       } 
       return vars; 
      } 
      site_location = getUrlVars()["location"]; 
      category_id = getUrlVars()["category_id"]; 
      per_page = getUrlVars()["per_page"]; 
      request_type = getUrlVars()["request_type"]; 

      //send the request via ajax 
      $.ajax({ 
        type: "POST", 
        url: "/test/testing/", 
        data: {site_location : site_location, category_id : category_id, per_page : per_page}, 
        dataType: "html" 
      }).done(function(msg) { 
       //get the returned message 
       $("#list").html(msg); 
      }); 

     }); 
    }); 
</script> 



<div id="list"> 
<a class="category_link" href="/?site_location=testing&per_page=testing&category_id=testing&request_type=testing">Test</a> 

回答

2

你的點擊處理程序綁定到該a元素。當ajax完成時,它會用一個新的元素替換a元素,該元素沒有綁定到它的點擊處理程序。

使用這個代替:

$("#list").on('click', '.category_link', function (event) { 

那的on()版本使用事件代表團,並與動態元素的作品。

請參閱on(),特別是關於直接和委託事件的部分。

(請注意,您應該添加event參數。有些瀏覽器不在乎,別人做。)

+0

真棒,謝謝您的幫助event.preventDefault()將工作!那就是訣竅。 –

1
$(".category_link").on('click' ,function() 

如果category_link動態添加到#list容器沒有觸發此事件。您必須如下所示處理事件委派。

$("#list").on('click', '.category_link', function (event) 

注意更換你上面的事件:如果您在功能通過它上面的