使用.html()后jquery脚本不起作用

时间:2013-04-23 14:48:05

标签: javascript jquery html

当我使用.html()来放置数据时,jQuery脚本无法使用新数据。 代码就像这样:

<html>
<head>
<script>
$(document).ready(function(){
    $("#newhtml").on("click", function(){
        alert("I'm the NEW one!");
    });
    $("#put_new").on("click", function(){
        $("#newdiv").html("<input type = 'button' id = 'newhtml' value = 'click on me'/>");
    });
});
</script>
</head>
<body>
<div id="newdiv"></div>
<input type="button" id="put_new" value="put new html" />
</body>
</html>

这是一个简单的例子,但是我想要放置更多数据,并且我希望新元素以这种方式与脚本一起使用。 我试图在stackoverflow.com上搜索,但我找不到任何适用的。 非常感谢你。

4 个答案:

答案 0 :(得分:3)

这是因为在执行当前.on()语句时,元素#newhtml不存在。

将您的事件绑定更改为:

$(document).on('click', '#newhtml', function(){
    alert("I'm the NEW one!");
});

您呼叫on()的主要元素必须在通话时存在。在第二个参数中,您可以指定在绑定时可能不存在的元素的选择器。

答案 1 :(得分:2)

使用此: - http://jsfiddle.net/FQjUZ/

 $("#newdiv").on("click", "#newhtml", function(){
        alert("I'm the NEW one!");
    });
    $("#put_new").on("click", function(){
        $("#newdiv").html("<input type = 'button' id = 'newhtml' value = 'click on me'/>");
    });

原因是,对于这种功能,其中元素稍后会添加到DOM ,您需要使用委托事件处理程序,而不仅仅是绑定。

事件处理程序仅绑定到当前选定的元素;在您的代码调用 .on()时,它们必须存在于页面上。

  

委托事件的优势在于它们可以处理来自稍后添加到文档的后代元素的事件。通过选择在附加委托事件处理程序时保证存在的元素,您可以使用委派事件来避免频繁附加和删除事件处理程序的需要。例如,此元素可以是模型 - 视图 - 控制器设计中视图的容器元素,如果事件处理程序想要监视文档中的所有冒泡事件,则可以是文档。在加载任何其他HTML之前,文档元素在文档的头部可用,因此可以安全地将事件附加到那里而无需等待文档准备就绪。

答案 2 :(得分:0)

你在newHtml上的事件将无法工作,因为你在将节点添加到DOM之前附加事件,所以为了使它能够工作,你需要在调用html方法之后实现你的事件。

 $(document).ready(function(){
    $("#put_new").on("click", function(){
      $("#newdiv").html("<input type = 'button' id = 'newhtml' value = 'click on me'/>");
      $("#newhtml").on("click", function(){
           alert("I'm the NEW one!");
       });
   });
});

答案 3 :(得分:0)

尝试这样的事情。

var f00 = "doStuff()";

$("#newdiv").html('<input type="button" id="newhtml" value="click on me" onclick="' + f00 + '"/>');

function doStuff() {
    //stuff
}