我有一个隐藏的文本字段,其值通过AJAX响应更新。
<input type="hidden" value="" name="userid" id="useid" />
当这个值发生变化时,我希望触发一个AJAX请求。有谁能告诉我如何发现这种变化吗?
我有以下代码,但不知道如何寻找值:
$('#userid').change( function() {
alert('Change!');
})
我有一个隐藏的文本字段,其值通过AJAX响应更新。
<input type="hidden" value="" name="userid" id="useid" />
当这个值发生变化时,我希望触发一个AJAX请求。有谁能告诉我如何发现这种变化吗?
我有以下代码,但不知道如何寻找值:
$('#userid').change( function() {
alert('Change!');
})
当前回答
可以使用Object.defineProperty()来重新定义输入元素的“value”属性,并在其更改期间执行任何操作。
Object.defineProperty()允许我们为属性定义getter和setter,从而控制它。
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/
其他回答
$('#userid').change(function(){
//fire your ajax call
});
$('#userid').val(10).change();
虽然这个帖子已经有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");
});
}
可以使用Object.defineProperty()来重新定义输入元素的“value”属性,并在其更改期间执行任何操作。
Object.defineProperty()允许我们为属性定义getter和setter,从而控制它。
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/
你可以简单地使用下面的函数,你也可以改变类型元素。
$("input[type=hidden]").bind("change", function() {
alert($(this).val());
});
改变隐藏元素的值不会自动触发.change()事件。所以,无论你在哪里设置这个值,你都必须告诉jQuery去触发它。
超文本标记语言
<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/
所以这已经很晚了,但我已经找到了一个答案,以防它对任何遇到这条线索的人有用。
改变隐藏元素的值不会自动触发.change()事件。所以,无论你在哪里设置这个值,你都必须告诉jQuery去触发它。
function setUserID(myValue) {
$('#userid').val(myValue)
.trigger('change');
}
一旦这样,
$('#userid').change(function(){
//fire your ajax call
})
应该按预期工作。