2012-09-01 24 views
1

我有兩個輸入字段。主要想法是,只要您將焦點放在其中一個字段上,按鈕點擊應該在其中打印一個隨機數字。JQuery的重點,以前點擊輸入錯誤

我的問題是,當你只關注(點擊)的第一個字段,然後集中在第二(反之亦然),按一下按鈕打印兩者,而不是隻在(去年)的重點領域。

你可以嘗試重新創建這裏的問題:http://jsfiddle.net/sQd8t/3/

JS:

$('.family').focus(function(){ 

var iD = $(this).attr('id'); 

    $("#sets").one('click',function() { 

     var ra = Math.floor((Math.random()*10)+1); 

     $('#'+iD).val(ra); 


    }); 

}); 

HTML:

<center class='mid'> 
    <input type="text" class="family" id="father" /> 
    <br/><br> 
    <input type="text" class="family" id="mother" /> 

    <br/> 
    <br/> 
    <input type='submit' value='Set text' id="sets"/> 
</center> 

回答

2

在 「焦點」 手LER,解除綁定任何現有的「點擊」處理程序:

$('#sets').unbind('click').one('click', function() { ... }); 

你有它的方式,額外的一次性「點擊」每場得到集中時間處理程序的約束,因爲jQuery讓你綁定儘可能多的處理器爲你喜歡一個事件。換句話說,調用.one()不會取消綁定其他處理程序。當實際發生點擊時,所有處理程序都會運行。

編輯 —對不起 - 「unbind」是舊的API;現在.off()是優選的。

+0

解除綁定AKA了嗎? –

+0

哦,是的,對不起,你是對的......我想「取消綁定」肯定還在工作(它在你的提琴製作) – Pointy

+0

好的謝謝:)它爲很好的說明完美:) –

1

將變量ID以外,和分離功能:

http://jsfiddle.net/sQd8t/8/

這從增加在每個輸入的點擊/焦點事件太多防止。 無需解除綁定。

var iD; 
$('.family').focus(function() { 
    iD = $(this).attr('id'); 
}); 

$("#sets").on('click', function() { 
    var ra = Math.floor((Math.random() * 10) + 1); 
    if (iD!="")$('#' + iD).val(ra); 
    iD = ""; 
}); 
+0

是的,這也是工作。 – Pointy

1

http://jsfiddle.net/sQd8t/11/

$('.family').focus(function(){ 

    $("#sets").attr('data-target',$(this).attr('id')) 

}); 

$("#sets").click(function() { 

    var target=$(this).attr('data-target'); 

    if(target){ 

     var ra = Math.floor((Math.random()*10)+1); 

     $('#'+target).val(ra); 

    } 

}); 

您可以創建一個data-target屬性,它包含了必須修改的領域。