Как определить, было ли какое-либо текстовое поле изменено с помощью внешнего скрипта? - PullRequest
0 голосов
/ 07 августа 2011

У меня есть некоторый плагин jQuery, который изменяет некоторые элементы, мне нужно какое-то событие или плагин jQuery, который запускает событие, когда изменяется какое-то значение ввода текста.Я скачал плагин jquery.textchange, это хороший плагин, но он не обнаруживает изменения через внешний источник.

Ответы [ 3 ]

1 голос
/ 08 августа 2011

@ MSS - Хорошо, это клудж, но он работает:

Когда я вызываю boxWatcher (), я устанавливаю значение 3000, но вам нужно будет делать это гораздо чаще, например, 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);
})
1 голос
/ 09 августа 2011

Благодаря @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);
}
1 голос
/ 07 августа 2011

попытайтесь установить старое значение в глобальную переменную, затем запустите событие onkeypress в текстовом вводе и сравните его со старым и новым значениями.что-то подобное

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

вы тестируете этот пример здесь

Edit

попробуйте добавить EventListnerк вашему текстовому вводу, я не знаю больше об этом, но вы можете проверить это Пост это может помочь

...