2013-07-17 12 views
12

mam to wejście ukrycia:zdarzenie jQuery na zmianę wartości wejścia ukrytego

<input id="j_idt26:myValue" type="hidden" name="j_idt26:myValue" value="0?100?"> 

Chcę ostrzec „hej” po raz pierwszy wartość jest ustawiony, a następnie za każdym razem, gdy zmienia.

mam coś takiego:

$(document).ready(function(){ 
    var $hello= $('[id$=myValue]'); 

    $hello.bind("change load", function(){ 
     alert('hey'); 
    }); 
}); 

ale nic nie jest wyświetlane.
Jeśli możesz pomóc
Dzięki

+0

Jak zmienić wartość wejściową? Używając programu val() programowo? –

+0

Jaką wersję jquery używasz? –

+0

Używam JQuery 1.8.3. Jest to aplikacja Java JSF, więc programowo. –

Odpowiedz

16
$(function(){ 
    var $hello= $('[id$="myValue"]'); 

    $hello.on("change", function(){ //bind() for older jquery version 
     alert('hey'); 
    }).triggerHandler('change'); //could be change() or trigger('change') 
}); 

Następnie, po każdej zmianie wartości docelowych ukrytych wejść, obsługi wyzwalania, np

$('#j_idt26:myValue').val('0?200?').triggerHandler('change'); 

Dzieje się tak, ponieważ zdarzenie onchange nie jest uruchamiane automatycznie, zmieniając jego wartość programowo.

+0

Dzięki! To jest odpowiedź, ponieważ zmieniałem wartość programowo;) –

0

Można spróbować tego kodu:

$(function(){ 
    var $hello = $('[id$="myValue"]'); 

    $hello.bind("change load", function(){ 
     alert('hey'); 
    }); 
}); 
2

Zdarzenie zmiany jest uruchamiane po zdarzeniu blur na wejściu, innymi słowy, gdy wejście traci ostrość. Dokumentacja MDN opisuje następująco:

Gdy element traci fokus po jej wartość została zmieniona, ale nie zaangażowani (np po edycji wartości lub).

Od input jest typu ukryte nigdy nie będzie żadnej interakcji użytkownika z input co oznacza, że ​​nie zmieni, chyba że skrypt po stronie klienta, dostarczane przez witryny zmienia go, który nie wywoła zdarzenie change.

Oto dwie opcje:

zmiana połączeń(), wyraźnie

Kiedykolwiek zmienić wartość ukrytej połączenia wejściowego .change() wyzwolić zdarzenie.

$(document).ready(function(){ 
    var $hello= $('[id$=myValue]'); 

    $hello.on("change", function(){ 
     alert('hey'); 
    }); 

    $hello.val("Something"); 
    $hello.change(); 
}); 

Wystarczy zadzwonić kod bez obsługi

Zamiast obsługi zdarzeń tylko wykonać kod będzie trzeba w źródle.

$(document).ready(function(){ 
    var $hello= $('[id$=myValue]'); 
    $hello.val("Something"); 
    alert('hey'); 
}); 

Kolejną rzeczą, o której chciałbym wspomnieć, jest to, że selektor może być trochę lepiej dopasowany.

var $hello= $('input[id$=myValue]'); 

A jeśli używasz nowej wersji jQuery wolą on zamiast bind jak pokazano w powyższym przykładzie.

+0

@roasted Dzięki, że usunąłem ten fragment kodu –

1

Jest to bardzo proste:

$('#my_id').val(myValue).trigger('change'); 

Następnie można wykryć zmianę wartości na $ ('#') my_id

Powiązane problemy