2016-10-18 68 views
0

我有3個輸入和3個按鈕。我想通過點擊按鈕來設置一個值。一切工作都很好,第一套。當我設置下一個輸入時,它會改變我所有輸入的值。onclick函數內部失敗

我該如何解決這個問題?

$(function() { 
 
    $("input").on("click", function() { 
 
    var here = $(this); 
 
    
 
    $("div").on("click", "button", function() { 
 
     here.val(this.value); 
 
    }); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input type="text"> 
 
<input type="text"> 
 
<input type="text"> 
 

 
<div> 
 
    <button value="a">a</button> 
 
    <button value="b">b</button> 
 
    <button value="c">c</button> 
 
</div>

回答

1

您是否希望將Button的值放入上一個聚焦的INPUT中。

這可能幫助..

$(function() { 
 
    var lastFocus; 
 
    $('body').on('focus','input', function() { 
 
    lastFocus = this; 
 
    }); 
 
    $("div").on("click", "button", function() { 
 
    $(lastFocus).val(this.value);  
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input type="text"> 
 
<input type="text"> 
 
<input type="text"> 
 

 
<div> 
 
    <button value="a">a</button> 
 
    <button value="b">b</button> 
 
    <button value="c">c</button> 
 
</div>

1

這是你想要的嗎?

$(function() { 
 
    $("input").on("click", function() { 
 
    var here = $(this); 
 
    
 
    $("div").on("click", "button", function() { 
 
     here.val(this.value+here.val()); 
 
    }); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input type="text"> 
 
<input type="text"> 
 
<input type="text"> 
 

 
<div> 
 
    <button value="a">a</button> 
 
    <button value="b">b</button> 
 
    <button value="c">c</button> 
 
</div>

+0

每次單擊輸入,您創建一個新的集合委託的事件。例如。如果說你點擊所有三個輸入,當你點擊按鈕它會做你的事件3次,再次點擊輸入它會做6次等等。這是一種內存泄漏:) – Keith

1

你爲什麼要使用外部函數?

您可以將臨時類添加到要更改值的輸入。

$("input").on("click", function() { 
     $("input").removeClass('addToThis'); 
     $(this).addClass('addToThis'); 
    }); 

    $("div").on("click", "button", function() { 
     $(".addToThis").val(this.text()); 
    }); 
+0

我認爲它應該是'$( 「.addToThis」)'(以點開頭)和'$(this).text()'代替'this.value'。例如:'$(「。addToThis」)。val($(this).text());' – Titus

+0

是的你是對的。編輯。謝謝。 – Rishabh

2

您可以點擊功能裏面沒有範圍的點擊功能,只需用兩個點擊全局變量...

$(function() { 
var here; 
    $("input").on("click", function() { 
    here = $(this);  
    }); 
    $("div").on("click", "button", function() { 
     here.val(this.value); 
    }); 
}); 
+1

只是一個腦袋,'here'不是一個全局變量。這是一個侷限於匿名函數的局部變量。只是說,因爲全局變量被認爲是不好的,但是你在這裏做的很好,你已經創建了一個閉包來捕獲局部變量'here'。 – Keith

+0

謝謝先生!!!!! –

1

最簡單的辦法:只要把這裏變出了第一點擊聽者:

$(function() { 
    var here; 
    $("input").on("click", function() { 
    here = $(this); 
    $("div").on("click", "button", function() { 
     here.val(this.value); 
    }); 
    }); 
}); 
+0

https://plnkr.co/edit/ySomgAogMQQyc4DUgB2S?p=preview –

+0

有一點警告,每次你點擊一個輸入,你就會創建一組新的委託事件。舉一個例子,在你的按鈕中放置一個console.log()點擊,點擊幾個輸入並觀看你的事件。也看看一個片段,而不是plnkr/codepen等。 – Keith