<html>
<head>
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript">

        $(document).ready(function() {

            $("button").click(function() {
                $("h2").html("<p class='test'>click me</p>")
            });   

            $(".test").click(function(){
                alert();
            });
        });

    </script>
</head>
<body>
    <h2></h2>
    <button>generate new element</button>
</body>
</html>

我试图通过单击按钮在<h2>中生成一个类名为test的新标记。我还定义了一个与test关联的单击事件。但是这个事件不起作用。

有人能帮忙吗?


当前回答

你也可以使用onclick="do_something(this) "“内部元素

其他回答

您遇到的问题是,您试图在DOM中有任何带有“test”类的东西之前将“test”类绑定到事件。虽然看起来这一切都是动态的,但真正发生的是JQuery传递DOM并在ready()函数触发时连接click事件,该事件发生在您在按钮事件中创建“click Me”之前。

通过将“test”Click事件添加到“button”单击处理程序,它将在DOM中存在正确的元素后将其连接起来。

<script type="text/javascript">
    $(document).ready(function(){                          
        $("button").click(function(){                                  
            $("h2").html("<p class='test'>click me</p>")                          
            $(".test").click(function(){                          
                alert()                          
            });       
        });                                     
    });
</script>

使用live()(正如其他人指出的那样)是另一种方法,但我觉得指出JS代码中的小错误也是一个好主意。你写的没有错,只是需要正确的范围。对于许多传统开发人员来说,掌握DOM和JS的工作原理是一件很棘手的事情。

Live()是一种更简洁的处理方法,在大多数情况下是正确的方法。它本质上是监视DOM,并在其中的元素发生变化时重新连接内容。

使用'on'作为点击绑定到已经存在的元素。

对如

$('test').on('click',function(){
    alert('Test');
})

这将有所帮助。

.live函数工作得很好。

它用于向舞台动态添加元素。

$('#selectAllAssetTypes').live('click', function(event){
                    alert("BUTTON CLICKED");
                    $('.assetTypeCheckBox').attr('checked', true);
                });

干杯, Ankit。

你可以点击添加动态创建的元素。下面的例子。使用“何时”来确保完成。在我的例子中,我用类扩展抓取了一个div,添加了一个“点击查看更多”的跨度,然后使用这个跨度隐藏/显示原始的div。

$.when($(".expand").before("<span class='clickActivate'>Click to see more</span>")).then(function(){
    $(".clickActivate").click(function(){
        $(this).next().toggle();
    })
});
$(.surrounding_div_class).on( 'click', '.test', function () {
alert( 'WORKS!' );
});

只会工作,如果DIV类.surrounding_div_class是直接的父对象。test

如果在div中有另一个对象将被填充,它将不起作用。