我有一些jQuery插件可以更改一些元素,我需要一些事件或jQuery插件,当某些文本输入值发生变化时触发事件。 我已经下载了jquery.textchange插件,它是一个很好的插件但不会通过外部源检测到更改。
答案 0 :(得分:1)
尝试将旧值设置为全局变量,然后在文本输入上触发onkeypress
事件,并在其旧值和新值之间进行比较。像这样的事情
var oldvlaue = $('#myInput').val();
$('#myInput').keyup(function(){
if(oldvlaue!=$('#myInput').val().trim())
{
alert('text has been changed');
}
});
您测试此示例here
修改强>
尝试在您的文字输入中添加EventListner
,但我不了解更多信息,但您可以查看Post这可能会有所帮助
答案 1 :(得分:1)
@MSS - 好吧,这是一个kludge,但它有效:
当我调用boxWatcher()时,我将值设置为3,000,但您需要更频繁地执行此操作,例如100或300。
var theOldContent = $('#theID').val().trim();
var theNewContent = "";
function boxWatcher(milSecondsBetweenChecks) {
var theLoop = setInterval(function() {
theNewContent = $('#theID').val().trim();
if (theOldContent == theNewContent) {
return; //no change
}
clearInterval(theLoop);//stop looping
handleContentChange();
}, milSecondsBetweenChecks);
};
function handleContentChange() {
alert('content has changed');
//restart boxWatcher
theOldContent = theNewContent;//reset theOldContent
boxWatcher(3000);//3000 is about 3 seconds
}
function buttonClick() {
$('#theID').value = 'asd;lfikjasd;fkj';
}
$(document).ready(function() {
boxWatcher(3000);
})
答案 2 :(得分:1)
感谢@Darin因为他/她的解决方案我已经标记为答案,但我已经制作了一些小的jQuery插件来实现名为'txtChgMon'的相同工作。
(function ($) {
$.fn.txtChgMon = function (func) {
var res = this.each(function () {
txts[0] = { t: this, f: func, oldT: $(this).val(), newT: '' };
});
if (!watchStarted) {
boxWatcher(200);
}
return res;
};
})(jQuery);
var txts = [];
var watchStarted = false;
function boxWatcher(milSecondsBetweenChecks) {
watchStarted = true;
var theLoop = setInterval(function () {
for (var i = 0; i < txts.length; i++) {
txts[i].newT = $(txts[i].t).val();
if (txts[i].newT == txts[i].oldT) {
return; //no change
}
clearInterval(theLoop); //stop looping
txts[i].f(txts[i], txts[i].oldT, txts[i].newT);
txts[i].oldT = $(txts[i].t).val();
boxWatcher(milSecondsBetweenChecks);
return;
}
}, milSecondsBetweenChecks);
}