2010-09-09 62 views
1

我遇到了这个脚本的问题,并为我的生活我无法弄清楚它有什么问题。通过我有什么快捷方式:jQuery .click()不会触发链接动态创建.wrapInner()

的HTML:

<ul> 
    <li id="wildcard_1"> 
     <div> 
      <a href="#">test</a> 
     </div> 
    </li> 
</ul> 
<a href="#" class="reset">reset</a> 

jQuery的:

// Main function 
$("[id^=wildcard_]").children('div').children('a').click(function() { 
    $(this).replaceWith($(this).text()); 
}); 

// Temporary reset function 
$("a.reset").click(function() { 
    $("[id^=wildcard_]").children('div').wrapInner('<a href="#"></a>'); 
}); 

因为它应该在第一次 “考试” 环节的工作原理是是被点击 - 它正在被转换成纯文本)。为了不在这里粘贴大量的脚本,我创建了一个临时函数来包装div的内容,将“测试”纯文本转换回链接。这就是它失控的地方 - 第一个函数的.click()侦听器不会在这个动态创建的链接上触发,FireBug不会引发任何错误或警告。

您还可以看到的jsfiddle这个活:http://jsfiddle.net/rWz69/

任何帮助就这将超过赞赏!

回答

11

您可以使用.live()处理程序,如:

$(document).on("click", "[id^=wildcard_] > div > a" , function() { 
    $(this).replaceWith($(this).text()); 
}); 

Here's your fiddle example updated/working with the above code :)

+2

问1分钟前,回答23秒前。我很肯定你是个电子人,尼克。 – Robert 2010-09-10 00:01:56

+0

简直太棒了,该死的太快了!有趣的是,在看到你的回答后第一个想到的事情是“上帝,我的选择是丑陋的”:)无论如何,如果问题不是太多,因为我的方法几乎使我疯狂,请你解释一下几句话为什么它不起作用,所以我可以在将来避免它?非常感谢,哥们! – 2010-09-10 00:08:45

+0

+1回答这么快,我可以补充。 – 2010-09-10 00:12:15

相关问题