2011-06-23 76 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