JQuery - Обнаружить изменение значения в скрытом поле ввода
У меня есть скрытое текстовое поле, значение которого обновляется через ответ AJAX.
<input type="hidden" value="" name="userid" id="useid" />
Когда это значение изменится, я хотел бы запустить запрос AJAX. Может ли кто-нибудь посоветовать, как обнаружить изменения?
У меня есть следующий код, но не знаю, как искать значение:
$('#userid').change( function() {
alert('Change!');
})
Ответы
Ответ 1
Так что это поздно, но я нашел ответ, если он станет полезным для всех, кто сталкивается с этим потоком.
Изменения значения для скрытых элементов автоматически не запускают событие .change(). Итак, где бы вы ни устанавливали это значение, вам также нужно указать jQuery для его запуска.
function setUserID(myValue) {
$('#userid').val(myValue)
.trigger('change');
}
Как только это произойдет,
$('#userid').change(function(){
//fire your ajax call
})
должен работать как ожидалось.
Ответ 2
Поскольку скрытый ввод не вызывает событие "изменения" при изменении, я использовал MutationObserver для запуска этого.
(Иногда скрытые изменения входных значений выполняются другими скриптами, которые вы не можете изменить)
Это не работает в IE10 и ниже
MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
var trackChange = function(element) {
var observer = new MutationObserver(function(mutations, observer) {
if(mutations[0].attributeName == "value") {
$(element).trigger("change");
}
});
observer.observe(element, {
attributes: true
});
}
// Just pass an element to the function to start tracking
trackChange( $("input[name=foo]")[0] );
Ответ 3
Вы можете просто использовать следующую функцию, вы также можете изменить элемент типа.
$("input[type=hidden]").bind("change", function() {
alert($(this).val());
});
Изменения значения для скрытых элементов автоматически не запускают событие .change(). Итак, где бы вы ни устанавливали это значение, вам также нужно сказать jQuery, чтобы вызвать его.
HTML
<div id="message"></div>
<input type="hidden" id="testChange" value="0" />
JAVASCRIPT
var $message = $('#message');
var $testChange = $('#testChange');
var i = 1;
function updateChange() {
$message.html($message.html() + '<p>Changed to ' + $testChange.val() + '</p>');
}
$testChange.on('change', updateChange);
setInterval(function() {
$testChange.val(++i).trigger('change');;
console.log("value changed" +$testChange.val());
}, 3000);
updateChange();
должен работать как ожидалось.
http://jsfiddle.net/7CM6k/3/
Ответ 4
Можно использовать Object.defineProperty()
, чтобы переопределить свойство "значение" элемента ввода и сделать что-либо во время его изменения.
Object.defineProperty()
позволяет нам определить геттер и сеттер для свойства, контролируя его.
replaceWithWrapper($("#hid1")[0], "value", function(obj, property, value) {
console.log("new value:", value)
});
function replaceWithWrapper(obj, property, callback) {
Object.defineProperty(obj, property, new function() {
var _value = obj[property];
return {
set: function(value) {
_value = value;
callback(obj, property, value)
},
get: function() {
return _value;
}
}
});
}
$("#hid1").val(4);
https://jsfiddle.net/bvvmhvfk/
Ответ 5
$('#userid').change(function(){
//fire your ajax call
});
$('#userid').val(10).change();
Ответ 6
Хотя эта тема 3 года, вот мое решение:
$(function ()
{
keep_fields_uptodate();
});
function keep_fields_uptodate()
{
// Keep all fields up to date!
var $inputDate = $("input[type='date']");
$inputDate.blur(function(event)
{
$("input").trigger("change");
});
}