重新追加后,jQuery触发的编辑链接无法正常工作

时间:2012-12-12 04:36:47

标签: jquery

我有一个jQuery使用append输出的超链接:

$('#content').append('<div id="appenddocumentationcontent">'+documentation_contentvalue + " <a title='Click to Edit' id='edit_content'>[Edit]</a></div>");

生成的HTML是:

<div id="content">
  <div id="appenddocumentationcontent">The quick brown fox jumps over the lazy dog <a id="edit_content" title="Click to Edit">[Edit]</a>
  </div>
</div>

我有一个使用jQuery的点击事件,如果点击它会显示一个文本区域,如果第一次点击编辑超链接它会正常工作(请注意选择器与超链接匹配):

    $('#content #edit_content').click(function() {  

          //Show textarea
    $('#textarea_documentation_content').show();    

      //Show OK button to close again this textbox

    $('#documentation_button_content').show();


      //Hide edit link
    $('#documentation_edit_content').hide();

      //Hide the current content div
    $('#documentation_content').hide();     


});

最后,我有另一个单击事件函数,用于确定按钮关闭文本区域,删除原始值,显示新值并再次显示编辑链接:

    $('#OK_button').click(function() {  
            //remove original content
    $('#appenddocumentationcontent').remove();

            //hide the text area
            $('#textarea_documentation_content').hide();


            //hide the OK button
            $('#documentation_button_content').hide();

            //show again the content div
    $('#documentation_content').show();


           //Show again the edit link
    $('#documentation_edit_content').show();

            //retrieve the new text area value
    var documentation_contentvaluex= $('textarea#textareainput_documentation_content').val();

            //finally append this new value
    $('#content').append('<div id="appenddocumentationcontent">'+documentation_contentvaluex + " <a title='Click to Edit' id='edit_content'>[Edit]</a></div>");

}); 

它完美地工作,除了主要问题是按下OK按钮后编辑链接不再工作。

在按下OK按钮之前和之后生成的HTML也非常相似,请看下面的内容:

点击之前确定:

<div id="content">
  <div id="appenddocumentationcontent">The quick brown fox jumps over the lazy dog <a id="edit_content" title="Click to Edit">[Edit]</a>
  </div> 
</div>

点击确定后(更换新内容):

<div id="content" style="display: block;">
  <div id="appenddocumentationcontent">This is the new content! <a id="edit_content" title="Click to Edit">[Edit]</a>
 </div>
</div>

如您所见,选择器根本没有改变,它应该在点击功能中使用这些选择器再次触发编辑链接:

$('#content #edit_content').click(function() {  

我错过了什么吗?非常感谢你的提示。

4 个答案:

答案 0 :(得分:1)

如果要添加和删除元素,请改用.on()。

$('#content').on('click', '#edit_content', function() { ... });

编辑:根据评论,.live()已被弃用,转而使用.on()

编辑2:正确授权

答案 1 :(得分:0)

您需要了解当您在“#appenddocumentationcontent”上调用.remove()方法时,您还要从页面中删除所有子项。添加新标记时,它没有绑定到之前创建的事件处理程序。所以基本上你需要再次绑定或使用$ .live()方法。

答案 2 :(得分:0)

click不适用于动态添加的元素,您应该使用on代替。

答案 3 :(得分:0)

您只能将事件处理程序附加到页面上实际存在的元素。当你删除元素并再次附加它时,这是一个在附加click处理程序时不存在的新元素,并且需要将它委托给持久存在且不会被删除的DOM上方的元素:

不推荐使用

live()delegate(),您应该使用jQuery 1.7及更高版本中的on()

$('#content').on('click', '#edit_content', function() {

   //do stuff    

});