jQuery – 检测隐藏的input字段上的值更改

我有一个隐藏的文本字段的值通过AJAX响应更新。

<input type="hidden" value="" name="userid" id="useid" /> 

当这个值改变时,我想发起一个AJAX请求。 任何人都可以build议如何检测变化?

我有以下代码,但不知道如何查找值:

 $('#userid').change( function() { alert('Change!'); }) 

所以现在已经很晚了,但是我发现了一个答案,以防万一遇到这个线程的人有用。

对隐藏元素的值更改不会自动触发.change()事件。 所以,无论你在哪里设置这个值,你也必须告诉jQuery来触发它。

 function setUserID(myValue) { $('#userid').val(myValue) .trigger('change'); } 

一旦这样的话,

 $('#userid').change(function(){ //fire your ajax call }) 

应该按预期工作。

由于隐藏的input不会在更改时触发“更改”事件,因此我使用MutationObserver来触发此事件。

(有时隐藏的input值更改是由其他一些无法修改的脚本来完成的)

这在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] ); 

你可以简单地使用下面的函数,也可以改变types元素。

  $("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/

 $('#userid').change(function(){ //fire your ajax call }); $('#userid').val(10).change(); 

可以使用Object.defineProperty()来重新定义input元素的“值”属性,并在其更改过程中执行任何操作。

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/

虽然这个线程是3岁,这是我的解决scheme:

 $(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"); }); }