Событие 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');
});
});