Скрытое событие изменения ввода
Как я могу обнаружить изменение значения скрытого ввода? Я уже попробовал эти подходы без успеха:
$('#id_inpout').live('change',function () {
var id_el = $(this).attr('id');
alert(id_el);
});
а также
$('#id_inpout').change(function () {
var id_el = $(this).attr('id');
alert(id_el);
});
а также
$('#id_inpout').bind('change',function () {
var id_el = $(this).attr('id');
alert(id_el);
});
2 ответа
Как было сказано в дубликатах, и, как вы видели, изменения, сделанные в JavaScript, не вызывают change
событие.
Поскольку я не нашел приемлемых ответов в дубликатах (то есть ответов, не связанных с изменением способа установки скрытого значения), и предположил, что вам это действительно нужно (то есть вы не можете вызвать свою функцию при изменении скрытого значения). input val), вот что вы можете сделать:
function survey(selector, callback) {
var input = $(selector);
var oldvalue = input.val();
setInterval(function(){
if (input.val()!=oldvalue){
oldvalue = input.val();
callback();
}
}, 100);
}
survey('#id_inpout', function(){console.log('changed')});
Но я бы предпочел использовать более прямые решения (т.е. вызывать функцию при изменении скрытого входного значения). Эта функция может быть вашим собственным простым диспетчером событий (в основном объект, заключающий в себе список функций, вызываемых при вызове).
РЕДАКТИРОВАТЬ: Сейчас 2015, и для людей, интересующихся, нет, ни один из последних достижений в мире Интернета не решает эту проблему. Наблюдатели мутаций не наблюдают свойство value ввода (это не совсем DOM), и объект-наблюдатель ES6 также бессилен для этих нативных объектов.
Вы также можете использовать trigger('change')
после назначения нового значения для скрытого ввода:
$('#hidden_input').val('new_value').trigger('change');