事件未在动态创建的元素上触发(JQuery)

时间:2013-06-15 06:26:06

标签: html css

我正在创建一个页面,要求用户能够创建输入元素,我需要能够根据与其相关的事件从这些元素中检索数据。我将它们附加到文档的正文中,并且它们正在追加,但随后他们的事件没有被触发。

JSFiddle: http://jsfiddle.net/g7Sdm/2/

基本HTML:

<input type="radio" class="userInput" value="I'm a radio button that already existed when the page loaded." />Pre-Existing Radio Button
<input type="text" class="userInput userTextInput" value="Text" />
<button type="button" id="addRadio">Add Radio Button</button>
<button type="button" id="addText">Add Text Input</button>

使用Javascript:

$(document).ready(function() {
    $("#addRadio").click(function() {
           $("html").append("<input type=\"radio\" class=\"userInput\" value=\"I'm a dynamically added radio button!\" />New Radio Button<br />");
    });
    $("#addText").click(function() {
           $("html").append("<input type=\"text\" class=\"userInput userTextInput\" value=\"Text\" /><br />");

    });
    $(".userInput").click(function() {
        alert($(this).val()); 
    });
    $(".userTextInput").keyup(function() {
        alert($(this).val()); 
    });
});

感谢您的帮助!!现在已经很晚了,我需要睡觉,但我会在早上回来看看。

2 个答案:

答案 0 :(得分:2)

更改为:

$(document).on("click", ".userInput", function() {
    alert($(this).val()); 
});

$(document).on("click", ".userTextInput", function() {
    alert($(this).val()); 
});

答案 1 :(得分:2)

你必须使用on()方法,因为元素必须以二进制方式绑定

$(document).ready(function() {
    $("#addRadio").click(function() {
           $("html").append("<input type=\"radio\" class=\"userInput\" value=\"I'm a dynamically added radio button!\" />New Radio Button<br />");
    });
    $("#addText").click(function() {
           $("html").append("<input type=\"text\" class=\"userInput userTextInput\" value=\"Text\" /><br />");

    });
    $(document).on("click","userInput",function() {
        alert($(this).val()); 
    });
    $(document).on("click",".userTextInput",function() {    
        alert($(this).val()); 
    });
});

以下是demo