2011-06-23 32 views
0

如何防止jquery中的混合值如果我使用$(this)?例如:

1: <input type="text" id="in1" class="test"> <br /> 
2: <input type="text" id="in2" class="test"> <br /> 

<div id="ppp"> <p class="show" id="one">onevalue</p> <p class="show" id="two">twovalue</p></div> 

#ppp { 
    display: none; 
} 

$(".click").click(function(e) { 

    $("#block").show(); 

    var current = $(this); 

    $(".show").click(function(e) { 
     current.val($(this).attr("id")); 
    }); 
}); 

活生生的例子 - http://jsfiddle.net/VmXU9/59/

如果我在1个输入点击显示我 “onevalue” 和 “twovalue”。如果我点击“onevalue”或“twovalue”,在1个输入中出现“onevalue”或“twovalue”的id。这很好,但是如果我另外点击2个输入并且在1个输入和2个输入中出现“onevalue”或“twovalue”的ID出现的“onevalue”或“twovalue”。应该只在一个 - 最后点击。我该如何制作?

谢谢!

+0

你不应该再这样的jQuery ofcourse: 附加VAR电流= $(本); current.val(this.attr(“id”)); – YesMan85

+0

我遇到了你的英语问题,所以我不能给你完美的建议,但是听起来你会受益于'.each()'http://api.jquery.com/jQuery.each/ –

+0

我不要认为反对票是适合这个问题的。这是一个有效的问题,但OP似乎与英语相抗衡。当然,这不能阻止他。 – JAAulde

回答

0

如果我理解你想要做什么,你需要:

  1. 移动的current
  2. 范围移动click事件的结合在input.show元素input.click元素的点击之外:

演示:http://jsfiddle.net/JAAulde/VmXU9/65/

理想情况下,你会关闭范围扩展到所有这一切,以避免引入current全球,和你检查current已从初始设置改变了它在操作之前:

演示:http://jsfiddle.net/JAAulde/VmXU9/66/

1

您每次输入被点击时都会绑定$(".show").click(),导致它重复。请务必先解除绑定:

$(".show").unbind('click').click(function(e) { 
//etc 
}); 
+1

在'click'的每个'bind'之前调用'click'的'unbind'并不可取。你可能会损害其他代码设置的事件处理,这对性能来说并不是最好的。逻辑的范围调整和重新安排将解决它而不需要解除绑定。 – JAAulde

+1

你说得对。更好的方法可能是将引用存储在某个地方的“主动”输入中,例如它们的容器的数据属性,并在$(“。show”)。click()中使用该引用。这样,你可以将它移出$(“。click”)。click()',将绑定的数量减少到最初的数量。 –

0

您必须解除对.show的点击。下面

活生生的例子

$('.show').unbind('click'); 

在挂例子 - http://jsfiddle.net/VmXU9/62/

+0

请参阅我对@Björn的回答的第一条评论。 – JAAulde

+0

没有迹象表明hes将其他点击事件绑定到该项目,并且在给出的示例中似乎不太可能。 – jzilla

+0

*“没有迹象表明他将其他点击事件绑定到该项目”* IMO,这就是要点。通过编程分配事件处理程序,直到“解除绑定”开始导致错误时,才会有这样的指示。至少,如果使用'unbind',则应该使用名称间隔事件。也就是说,我仍然认为这不是一个高性能的解决方案 - 该主题已经在几个jQuery播客,博客和论坛上讨论过。我不是故意贬低,只是提出我对这个问题的看法。 – JAAulde