Javascript 如果我将某个HTML注入DOM后将使用的jQuery放入$('document').ready()中,会有问题吗?

Javascript 如果我将某个HTML注入DOM后将使用的jQuery放入$('document').ready()中,会有问题吗?,javascript,jquery,document-ready,Javascript,Jquery,Document Ready,我有一个jQuery函数,当单击某个按钮时,它会删除某些html。在单击另一个按钮之前,此HTML不存在于DOM中。单击时删除HTML的按钮不存在,直到单击另一个按钮并单击时删除自身。$'document'.ready函数中存在此问题吗?如果不是,它应该在哪里 我之所以问这个问题,是因为我知道这个函数在某种程度上导致了一个bug,但我不知道在哪里。如果你有任何其他想法,这将是非常有益的 代码如下: <div id="popups"> <div id="createfor

我有一个jQuery函数,当单击某个按钮时,它会删除某些html。在单击另一个按钮之前,此HTML不存在于DOM中。单击时删除HTML的按钮不存在,直到单击另一个按钮并单击时删除自身。$'document'.ready函数中存在此问题吗?如果不是,它应该在哪里

我之所以问这个问题,是因为我知道这个函数在某种程度上导致了一个bug,但我不知道在哪里。如果你有任何其他想法,这将是非常有益的

代码如下:

<div id="popups">
    <div id="createform">
        <div id="createformInside">
            <input type="text" id="testTitle" size="20">
            <input type="text" id="testSubj">
            <span id="testOptions">More Options</span>
            <br/>
            <textarea id="testContent" ></textarea>
            <input type="button" value="Save Test" id="saveBttn">
        </div>
     </div>
</div>

$('#saveBttn').click( function() {//if the save button on the create test form is clicked...
    $('#createform').remove();//gets rid of the create test form
})

如果这有帮助,完整的代码在这里:

使用live,而不是在运行时单击

Live将用于将来引用dom元素

$('#saveBttn').live('click', function() {

});

在运行时使用live而不是单击

Live将用于将来引用dom元素

$('#saveBttn').live('click', function() {

});

您可能应该将代码放在生成HTML的按钮的.click中

顺便说一句,您需要关闭输入标签,例如:

<input type="text" id="testSubj"/>

您可能应该将代码放在生成HTML的按钮的.click中

顺便说一句,您需要关闭输入标签,例如:

<input type="text" id="testSubj"/>

您的问题来自这样一个事实,即当文档准备就绪时,您要将单击处理程序绑定到的html输入元素不存在。这意味着当.click处理程序实例化时,它不存在。要将处理程序绑定到现在和将来存在的元素,可以使用.live或.delegate。我更喜欢后者,因为它不绑定到文档并等待事件冒泡,而是绑定到您传递给它的选择器,只监视在特定元素中触发的冒泡事件

因此,考虑到这一点,您可以这样修改代码:

$('#popups').delegate("#saveBttn", "click", function() {//if the save button on the create test form is clicked...
    $('#createform').remove();//gets rid of the create test form
});

您的问题来自这样一个事实,即当文档准备就绪时,您要将单击处理程序绑定到的html输入元素不存在。这意味着当.click处理程序实例化时,它不存在。要将处理程序绑定到现在和将来存在的元素,可以使用.live或.delegate。我更喜欢后者,因为它不绑定到文档并等待事件冒泡,而是绑定到您传递给它的选择器,只监视在特定元素中触发的冒泡事件

因此,考虑到这一点,您可以这样修改代码:

$('#popups').delegate("#saveBttn", "click", function() {//if the save button on the create test form is clicked...
    $('#createform').remove();//gets rid of the create test form
});


你能发布这个按钮的代码以及你是如何调用这个函数的吗?您最好对按钮使用jqueryclick事件,而不是命名函数,这样就不会出现名称冲突。@Jim Schubert,现在发布。我用了一个点击事件你能发布按钮的代码和你如何调用这个函数吗?您最好对按钮使用jqueryclick事件,而不是命名函数,这样就不会出现名称冲突。@Jim Schubert,现在发布。我点击了一下event@crhomedude,最好将其包装在document.ready函数上…这样它将一直运行到所有内容加载为止。似乎没有帮助。我只是把完整的代码放在这里:。希望这会有所帮助。虽然在document.ready中包装内容是一种非常好的做法,但jquery-live的本质是,在这种情况下不这样做实际上是可以的。live通过事件冒泡来工作,所以相关的DOM元素还没有出现并不重要。。。现在我明白了,我以前并不完全理解这一点。thanks@crhomedude,最好将其包装在document.ready函数上…这样它将一直运行到所有内容加载为止。似乎没有帮助。我只是把完整的代码放在这里:。希望这会有所帮助。虽然在document.ready中包装内容是一种非常好的做法,但jquery-live的本质是,在这种情况下不这样做实际上是可以的。live通过事件冒泡来工作,所以相关的DOM元素还没有出现并不重要。。。现在我明白了,我以前并不完全理解这一点。谢谢。。。我只是把完整的代码放在这里:。希望这能有所帮助。请参阅编辑。请注意,您应该检查添加-当两次单击New Test时,您将添加两个表单,并且它们具有相同的ID,这是不好的。那是另外一个问题。好的,我明白了。是的,我知道。这是我要做的事情,但现在对我来说并不是特别重要。谢谢。没问题,很高兴你找到了解决办法!隐马尔可夫模型。。。我只是把完整的代码放在这里:。希望这能有所帮助。请参阅编辑。请注意,您应该检查添加-当两次单击New Test时,您将添加两个表单,并且它们具有相同的ID,这是不好的。那是另外一个问题。好的,我明白了。是的,我知道。这是我要做的事情,但现在对我来说并不是特别重要。谢谢。没问题,很高兴你找到了解决办法!