2017-06-26 61 views
1

繼最佳實踐,有回調函數和處理最初父裝載格,我這樣做:正在分配的onclick函數動態創建按鈕

$("#buttons_div"). 
 
html('<input type="button" value="Click me" id="button1" />', function() { 
 
    $("#buttons_div"). 
 
    on("click", "#button1", function() { 
 
    alert("alert") 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div id="buttons_div"> 
 
</div>

爲什麼這不起作用?

回答

2

這不起作用。這兩個陳述應該是分開的。您不能將事件處理程序作爲參數傳遞給.html()函數。你需要做的是這樣的:

$(function() { 
 
    $("#buttons_div").html('<input type="button" value="Click me" id="button1" />'); 
 
    $("#buttons_div").on("click", "#button1", function() { 
 
    alert("alert") 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="buttons_div"> 
 
</div>

+0

我想過。但是我怎樣才能保證事件處理程序只在方法.html完成後才被分配?不應該是回調的地方? –

+1

或考慮到因爲'.html'沒有回調,代碼是否總是按順序執行? –

+1

@JoãoPimentelFerreiraHTML代碼是連續的。它不是異步的。 ':)' –

1

這是因爲你嵌套html()函數內部的單擊事件。

$("#buttons_div").html('<input type="button" value="Click me" id="button1" />'); 
 
$("#buttons_div").on("click", "#button1", function(){ 
 
    alert("alert") 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div id="buttons_div"> 
 
</div>

+0

謝謝。我想過這個。但是我怎樣才能保證事件處理程序只在方法.html完成後才被分配?不應該是回調的地方? –

1

對於動態生成的元素直接JavaScript函數不列入爲元素的作品。因此,您必須使用該動態生成元素的父元素,或者可以使用文檔而不是該父元素。

$(function() { 
$("#buttons_div").html('<input type="button" value="Click me" id="button1" 
/>'); 
$(document).on("click", "#button1", function() { 
alert("alert") 
}); 
}); 

或者您也可以使用該這樣做:

$(function() { 
$("#buttons_div").html('<input type="button" value="Click me" id="button1" 
/>'); 
$("#buttons_div").on("click", "#button1", function() { 
alert("alert") 
}); 
});