2013-05-08 114 views
2

我寫了一個php腳本index.php,如下所示。該腳本將在加載時創建一些超鏈接。如果我點擊這些超鏈接中的任何一個,它將加載example.php的輸出div標籤id="myDiv"example.php的輸出又是一些超鏈接,我希望在點擊這些鏈接時執行jquery函數。在這種情況下,我給了這個jquery函數裏面的一個alert,但它沒有執行該jquery函數。整個代碼如下。請幫我解決這個問題。jQuery不能在超鏈接上點擊

<?php 
    $mainlinks = array("10.3.2.0","10.3.2.1","10.3.2.2"); 
    for($i=0;$i<count($items);$i++) 
    { 
     echo "<a class='likelink' href='javascript:void(0)'>$mainlinks[$i]</a>" . "<br>"; 
    } 
?> 

<html> 
    <head> 
    <script src="jquery/jquery-1.9.1.js"></script> 
    <script type="text/javascript"> 
    $(function() { 
     $('.likelink').click(function() { 
     $('#myDiv').load("example.php");         
     }); 
    }); 
    $(function() { 
     $('.sublink').click(function() { 
      alert("hello");         
     }); 
    }); 
    </script> 
    </head> 
    <body> 
    <div id="myDiv"></div> 
    </body> 
</html> 

這我使用example.php文件

<?php 
    $sublinks = array("abcd","efgh","ijkl"); 
    for($i=0;$i<5;$i++) 
    { 
     echo "<a class='sublink' href='javascript:void(0)'>sublinks[$i]</a>" . "<br>"; 
    } 
?> 

回答

2

由於sublink加載索引頁時不存在,則需要使用委派事件註冊模型來處理click事件。

使用.on()註冊點擊事件,因爲sublink的加載到#myDiv您可以使用下面的代碼。

$(function() { 
    $('#myDiv').on('click', '.sublink', function() { 
     alert("hello");         
    }); 
}); 

更新:
基本解釋將沿的......當您使用click()註冊事件處理程序方法將處理程序添加到只有那些出現在DOM當時這些元素的走行代碼的執行。當你處理元素的動態創建/加載時,這將不起作用,因爲命令執行時元素可能不在dom中

+0

這很好工作dude.Can你在這裏解釋的邏輯。我對Jquery很陌生,這就是爲什麼問。 – user2356932 2013-05-08 07:27:22

+0

@ user2356932瞭解更多信息的一個簡單方法是搜索'使用jQuery添加事件處理程序到動態元素'。 – 2013-05-08 07:29:39

+0

感謝兄弟的解釋。 – user2356932 2013-05-08 07:31:25

0

在你的問題中,當你的頁面加載時,子鏈接不存在需要使用委託事件來處理點擊事件。

$(function() { 
    $(document).on('click','.likelink',function(e) { 
     e.preventDefault(); 
     $('#myDiv').load("example.php");         
    }); 
}); 

jquery.on()

的事件處理程序僅結合到當前選擇的元素;它們必須在您的代碼撥打.on()時在頁面上存在。爲確保元素存在且可以選擇,請在文檔就緒處理程序中爲頁面上HTML標記中的元素執行事件綁定。如果將新的HTML注入頁面,請在將新的HTML放入頁面後選擇元素並附加事件處理程序。或者,使用委託事件來附加事件處理程序,如下所述。

委託事件的優點是它們可以處理來自稍後添加到文檔中的後代元素的事件。

此外,你php code應該在body你是echoinglinks

<body> 
    <?php 
     $mainlinks = array("10.3.2.0","10.3.2.1","10.3.2.2"); 
     for($i=0;$i<count($items);$i++) 
     { 
      echo "<a class='likelink' href='javascript:void(0)'>$mainlinks[$i]</a>" . "<br>"; 
     } 
    ?> 
</body> 
+0

This是不正確的,甚至沒有試圖解釋實際問題或解決方案。 – andyb 2013-05-08 07:30:24