2013-04-16 12 views
19

Załóżmy, że masz proste pole tekstowe i przycisk na swojej stronie. Kliknięcie przycisku zaktualizuje wartość pola tekstowego:jQuery wykrywa zmianę wartości pola tekstowego NIE na podstawie danych wprowadzonych przez użytkownika

HTML:

<input type="text" id="myText" val="" /> 
<input type="button" id="myBtn" value="Change TextBox Value" /> 

jQuery:

$("#myBtn").on('click', function() { 
    $("#myText").val('adsf'); 
}) 

Chciałbym dodać detektor zdarzeń dla zdarzenia zmiana pola tekstowego, jak więc:

$('#myText').on('change', function(){ 
    alert('Changed!') 
}); 

To ostrzeżenie nie zostanie wyzwolone po kliknięciu przycisku, ale zostanie wyzwolone pl ręcznie zmień wartość pola tekstowego i ustaw ostrość z niego.

Wiem, że można dodać $("#myText").trigger('change') do zdarzenia onclick przycisku, ale chcę to osiągnąć tylko przez dodanie detektora zdarzeń do pola tekstowego.

jsfiddle

Dzięki

+0

Tak samo jak wyjaśnienie - chcesz, aby alert był uruchamiany przez ręczną zmianę pola tekstowego i kliknięcie przycisku? – AxGryndr

+0

Chce, aby alert został wywołany nie przez kliknięcie, ale przez zmianę w polu tekstowym. –

+0

Hanlet jest poprawny. jakakolwiek zmiana z dowolnego miejsca – Sammy

Odpowiedz

12

Nie ma takiego zdarzenia. Jedyną rzeczą, można spróbować jest ustawienie interwału lub limitu czasu, aby sprawdzić, czy wartość została zmieniona (używając dane do przechowywania wartości tymczasowe):

var $myText = $("#myText"); 

$myText.data("value", $myText.val()); 

setInterval(function() { 
    var data = $myText.data("value"), 
     val = $myText.val(); 

    if (data !== val) { 
     $myText.data("value", val); 
     alert("changed"); 
    } 
}, 100); 

DEMO:http://jsfiddle.net/xZcAr/1/

+0

Świetny pomysł, jednak nie jestem pewien co rodzaj wydajności, którą uzyskałaby strona, gdyby na stronie było wiele pól tekstowych. – Sammy

+1

@Sammy W każdym przypadku lepiej jest używać wyzwalania ręcznego. – VisioN

+0

@VisionN - Dzięki za pomoc. Przyjmę to jako odpowiedź, ponieważ będzie to technicznie działało, ale nie jest preferowaną metodą, chyba że przejdę z ręcznym wyzwalaniem, zgodnie z sugestią. – Sammy

0

trzeba by połączyć obie ładowarki. Aby ponownie użyć programu obsługi, możesz go wyodrębnić do nazwanej funkcji:

function showChanged(){ 
    alert('Changed!') 
} 

$("#myBtn").on('click', showChanged); 
$("#myText").on('change', showChanged); 
+0

Dzięki Kenneth. To zadziała, ale chcę to osiągnąć tylko przez dodanie detektora zdarzeń do pola tekstowego, a nie przycisku. – Sammy

+0

Obawiam się, że oprócz samodzielnego podniesienia zdarzenia, nie jest to możliwe. – Kenneth

1

Dlaczego nie wymusić obsługi zdarzenia, gdy przycisk zostanie kliknięty jak tak -

$('#myText').on('change, blur',function(e){ 
    alert('Changed!'); 
}); 

$("#myBtn").on('click', function() { 
    $("#myText").val('adsf'); 
    $("#myText").blur(); 
}) 
1

trzeba po prostu używać keyup funkcję:

$("#myText").keyup(function(){ 
    alert($(this).val()); 
}); 
Powiązane problemy