2011-02-25 70 views
0

由于you can see here,我的小jQuery脚本运行两次后不工作,我得到一个奇怪的错误。你们中的任何一个碰巧知道发生了什么/如何解决它?如果你这样做会很棒!jQuery在执行一次后不工作

谢谢!

康纳

+0

注:该错误显示了在2返回 – thenoviceoof 2011-02-25 05:19:31

+0

@thenoviceoof谢谢你 - 只是固定它;) – Connor 2011-02-25 05:23:10

回答

2

您只绑定第一个.focus元素上的按键事件。一旦你删除它,它将不会再收到按键事件。

改变这一行

$(".focus").keypress(function(event) { 

$(".focus").live("keypress",function(event) { 

的jQuery .live()附加一个处理程序的情况下为当前选择现在和将来匹配这,所有的元素。

另外,你需要以上低于行 后添加是为了防止意外的行为:

if (event.which == '13') { 
    event.preventDefault(); < stop the enter keypress 
+0

完美,完美无瑕。谢谢 - 一旦它允许我将它标记为正确! – Connor 2011-02-25 05:27:04

+0

增加了一行代码来回答 – Nimrod 2011-02-25 05:28:52

+0

另外,您可能想考虑Ates的建议,只需将'.before()',文本插入到'.active-live'元素中,而不是全部删除'' 。 – Nimrod 2011-02-25 05:30:40

1

你消除对您要添加的初始keypress事件处理程序的元素。速战速决是采取了事件处理成一个功能,它重新连接到新添加的元素:

function handleKeyPress(event) { 
    if (event.which == '13') { 
     var itemToAdd = $(".focus").val(); 
     if (itemToAdd != ""){ 
      $(this).remove(); 
      $(".active-li").append(itemToAdd); 
      $("#wrapper ul").append("<li class='active'><input type='text' class='root focus' /></li>"); 
      $(".active-li").removeAttr("class"); 
      $(".active").removeClass("active").addClass("active-li"); 
      $(".focus").keypress(handleKeyPress).focus(); 
     } 
    } 
} 

$(".focus").keypress(handleKeyPress); 

但我必须说,这看起来像一个非常低效的方式来实现你想要什么在这里做...想想一个替代解决方案,您不必删除您的输入元素(只需在它之前插入新的<li>即可)。

+0

谢谢阿泰,我一定会考虑的! – Connor 2011-02-25 05:34:33

相关问题