2017-07-05 17 views
0

在我的DOM這是動態生成的:jQuery的。對不工作

<li>333107 (<span id="pos_3488">1</span>) 
<span><a id="del_3488" href="#" id_mod="3488"> - </a></span></li> 

我的jQuery代碼:

$("a[id^='del_']").on("click", function(e){ 
    var id_modelo = $(this).attr("id_mod"); 
    var id_bloque = $(this).parent().attr("id"); 
}); 

但是,當你點擊HTML元素,也沒有呼叫「點擊事件「。

+0

瀏覽器控制檯中的任何錯誤? – Lal

+2

你的腳本只是設置變量,沒有別的。你期待它做什麼? – Grasper

+0

寫一個警報或console.log來驗證它是否真的被調用......你只是在你的點擊事件處理程序中設置變量 –

回答

1

該代碼將幫助你。

如果你動態加載的數據比你有使用

  • $(document).on("click",...)
  • 還你在這一行做出的錯誤了。它是'a [id^=del_]'

$(document).on("click",'a[id^=del_]', function(e){ 
 
    e.preventDefault(); 
 
    var id_modelo = $(this).attr("id_mod"); 
 
    var id_bloque = $(this).parent().siblings("span").attr("id"); 
 
    console.log(id_modelo); 
 
    console.log(id_bloque); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<li>333107 (<span id="pos_3488">1</span>) 
 
<span><a id="del_3488" href="#" id_mod="3488"> - </a></span></li>

-1

在添加偵聽器之前,您是否確定生成了html?下面的代碼似乎正在工作。這可能是一個競爭條件問題。也許設置一個timeout。添加偵聽器之前。

$(function(){ 
 
    setTimeout(function(){ 
 
    $("a[id^='del_']").on("click", function(e){ 
 
     var id_modelo = $(this).attr("id_mod"); 
 
     var id_bloque = $(this).parent().attr("id"); 
 
     console.log("hit:", id_modelo); 
 
    }); 
 
    }, 2000); //Wait 2 seconds before setting the event listener 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<ul> 
 
    <li>333107 (<span id="pos_3488">1</span>) 
 
    <span><a id="del_3488" href="#" id_mod="3488"> - </a></span></li> 
 
</ul>

1

在此情況下,我很難推薦模式 「事件代理」 https://learn.jquery.com/events/event-delegation/

這是你的代碼的解決方案:

$(document).on("click", "a[id^='del_']", function(e) { 
    var id_modelo = $(this).attr("id_mod"); 
    var id_bloque = $(this).parent().attr("id"); 
}); 

事件應該分配給一個常量DOM元素,在這種情況下,我正在使用文檔,但您可以將其更改爲另一個文檔。

事件委託是這類問題的根本解決方案,框架作爲角色,反應,vuejs使用這種模式作爲性能解決方案,因爲他們經常更改DOM。