Событие jQuery при изменении значения ввода скрыто

У меня этот ввод скрыт:

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

Я хочу предупредить "эй" в первый раз, когда значение установлено, а затем каждый раз, когда оно изменяется.

У меня есть что-то вроде этого:

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

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

Но ничего не появляется.
Если вы можете помочь Благодаря

Ответ 1

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

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

Затем каждый раз, когда вы изменяете значение целевых скрытых входов, обработчик триггеров, например:

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

Это потому, что событие onchange не запускается автоматически, изменяя его значение программно.

Ответ 2

Событие изменения запускается после события blur на входе, другими словами, когда вход теряет фокус. Документация MDN описывает это:

Когда элемент теряет фокус после изменения его значения, но не (например, после редактирования значения или).

Так как input имеет скрытый тип, никогда не будет никакого взаимодействия с пользователем input, что означает, что он не изменится, если клиентская сторона script, предоставленная вашим сайтом, не изменит его, что не вызовет событие изменения.

Вот два варианта:

Вызов change() явно

Всякий раз, когда вы изменяете значение скрытого входного вызова .change() для запуска события.

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

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

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

Просто вызовите код без обработчика

Вместо использования обработчика событий просто выполните код, который у вас был бы внутри источника.

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

Еще одна вещь, которую я хотел бы упомянуть, - это то, что селектор может быть немного лучше.

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

И если вы используете новую версию jQuery, выберите on вместо bind, как показано в приведенном выше примере.

Ответ 3

Это очень просто:

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

Затем вы можете определить значение изменения в $('# my_id')

Ответ 4

Вы можете попробовать этот код:

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

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