2014-01-06 39 views
1

我在使用這個工作時遇到了一些麻煩,我使用JQuery從mySQL獲取結果列表,結果包括一個名稱和處理程序鏈接(JQuery),它應該觸發函數/事件,但它不工作由於某種原因JQuery - 點擊/鏈接處理程序的問題

這裏是我的第一個頁面的代碼:

這個腳本運行查詢和使用JQuery的ajax_load.php文件獲取結果:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"> 
</script> 

    <script type="text/javascript"> 
     $(function() { 
      $("#lets_library").bind('submit',function() { 
       var value_name = $('#name').val(); 

       if(value_name) 
        { 
        $("#find_library").html('Loading results...'); 
        } 


       $.post('ajax_load.php',{value_name:value_name}, function(data){ 

        $("#search_results_library").html(data); 
       }); 
       return false; 
      }); 
     }); 
    </script> 

在相同的第一頁這等腳本是單擊處理,顯示ID點擊,但它不工作:

<script type="text/javascript"> 
$(document).ready(function(){ 

    /// shows my ID from the result row /// 
    $('.next-click').click(function() { 
    alert("my id: " + $(this).data("id")); 

    }); 
}); 
</script> 

這是ajax_load.php從代碼的一部分返回與鏈路結果ID被點擊:

while($row = mysql_fetch_array($result_query)) 
{ 


echo ' 
<table width="100%" border="1"> 
<tr> 
<td> 
'; 
echo '<a href="#" class="next-click" data-id="'; echo $row['ID']; echo '">'; 
echo $row['name']; 
echo '</a> 
</td> 
</tr> 
</table>'; 

} 

問題是,當我點擊鏈接時,它會在URL頁面的末尾添加一個#並且沒有任何反應,就像腳本甚至沒有。 請幫忙!

+0

您可以糾正這一點:1)jQuery的'.bind'已過時,用'.on'像@Arun P Jhony顯示,2)運營商在你的PHP while循環中是一個ASSIGNMENT運算符,而不是比較運算符。將其更改爲'=='或'===' – Tyblitz

回答

3

您需要使用event delegation爲紐帶動態

$(document).ready(function() { 
    /// shows my ID from the result row /// 
    $('#search_results_library').on('click', '.next-click', function() { 
     alert("my id: " + $(this).data("id")); 
    }); 
}); 

當您使用$('.next-click').click(..)創建,點擊處理程序將獲得註冊,只在執行腳本時,它存在於網頁中的元素next-click。稍後添加的元素將不會獲得觸發器。

所以解決方案是綁定處理程序到一個已經存在於dom中的元素(它是目標元素的祖先),但傳遞一個額外的選擇器來指定我們正在尋找的實際目標。 jQuery的.on()方法提供了這個功能

+0

優秀!!!,謝謝! – AJ152

1

試試這個:

$("#search_results_library").on('click', '.next-click', function(e) { 
    e.preventDefault(); 
    alert("my id: " + $(this).data("id")); 

});