我们都知道使用val()
不会触发change
事件,因此我们也会在.trigger('change')
后面使用val()
。
但问题是有人用val()
写了trigger()
并且它是一个我无法编辑它的外部文件。
那么,如何通过以下相同的代码检测值变化:
$('.elem').on('change', function(){
// do something
});
答案 0 :(得分:1)
我的建议是覆盖jquery' val()
var originalValFn = jQuery.fn.val;
jQuery.fn.val = function() {
this.trigger('change');
originalValFn.apply( this, arguments );
}
jsfiddle:http://jsfiddle.net/2L7hohjz/js
答案 1 :(得分:1)
var originalValFn = jQuery.fn.val;
function getErrorObject(){
try { throw Error('') } catch(err) { return err; }
}
jQuery.fn.val = function() {
if ($(this).hasClass( "element" )) {
var err = getErrorObject();
var caller_line = err.stack.split("\n")[4];
var index = caller_line.indexOf("at ");
var clean = caller_line.slice(index+2, caller_line.length);
console.log(clean);
console.log(arguments);
}
originalValFn.apply( this, arguments );
};
答案 2 :(得分:0)
尝试:
setTimeout(function() {
if (currentValue != previousValue)
{
// do something
}
}, 500);
谢谢,
答案 3 :(得分:0)
我通常使用这篇文章中的解决方案来解决像这样的问题:
watchField('.elem', function(){
//do some stuff here
});
function watchField(selector, callback) {
var input = $(selector);
var oldvalue = input.val();
setInterval(function(){
if (input.val()!=oldvalue){
oldvalue = input.val();
callback();
}
}, 100);
}
答案 4 :(得分:-1)
尝试:
$('.elem').on('keyUp', function(){
// do something
});
或
$('.elem').on('lostFocus', function(){
// do something
});
谢谢,