【问题标题】:How to detect if some text box is changed via external script?如何检测是否通过外部脚本更改了某些文本框?
【发布时间】:2011-08-07 13:13:22
【问题描述】:

我有一些 jQuery 插件可以更改一些元素,我需要一些事件或 jQuery 插件来在某些文本输入值更改时触发事件。 我已经下载了 jquery.textchange 插件,它是一个很好的插件,但不会通过外部源检测到更改。

【问题讨论】:

  • 通过外部资源是什么意思?
  • 有什么原因你不能使用 .live('onblur')?
  • @Miroprocessor 我的意思是一些 jQuery 插件或使用 javascript 代码。
  • @Darin 谢谢,我刚试过但没用!
  • 真的,如果不是 JavaScript,文本将如何被外部源更改?

标签: javascript jquery html textinput


【解决方案1】:

@MSS -- 好吧,这是一个杂牌,但它有效:

当我调用 boxWatcher() 时,我将值设置为 3,000,但您需要更频繁地执行此操作,例如 100 或 300。

http://jsfiddle.net/N9zBA/8/

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);
})

【讨论】:

  • 非常感谢。不幸的是,我认为这是唯一的解决方案,如果,那么它是 HTML 和 Java 脚本的一个巨大弱点!!! :(
【解决方案2】:

尝试将旧值设置为全局变量,然后在您的文本输入上触发 onkeypress 事件并比较它的旧值和新值。类似的东西

  var oldvlaue = $('#myInput').val();
  $('#myInput').keyup(function(){
     if(oldvlaue!=$('#myInput').val().trim())
     {
        alert('text has been changed');
     }
 });

你测试这个例子here

编辑

尝试将EventListner 添加到您的文本输入中,我不了解更多信息,但您可以查看此Post 它可能会有所帮助

【讨论】:

  • 我看到了这个例子,但这并没有检测到“外部”变化!
  • 我的意思是,如果“某事”以编程方式更改了输入文本的值,它将无法正常工作!
  • 感谢@Miroprocessor,我认为它和jQuery中的$.bind一样,但问题是这里没有有用的事件可以绑定!
【解决方案3】:

感谢@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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多