如何检查模糊事件的值是否已更改?

pen*_*ake 16 javascript onblur dom-events

基本上我需要检查'blur'事件的文本框中是否更改了值,这样如果值没有改变,我想取消模糊事件.

如果可以检查它,用户是否在输入HTML元素的blur事件上更改了值?

谢谢,

Pek*_*ica 26

我不认为有一种本地方式可以做到这一点.我要做的是,向focus事件添加一个函数,将当前值保存到附加到元素(element.oldValue = element.value)的变量中.你可以检查那个值onBLur.

  • 不知道为什么这是例外的答案,可以这样做,如下面的答案 /sf/answers/2846670851/ (4认同)

And*_*y E 5

您无法取消模糊事件,您需要在计时器中重新聚焦。您可以设置一个变量 onfocus 或设置一个hasChanged变量在 change 事件上。模糊事件在更改事件之后触发(不幸的是,对于这种情况),否则您可以在 onchange 事件中重置计时器。

我会采取类似的方法:

(function () {
    var hasChanged;
    var element = document.getElementById("myInputElement");
    element.onchange = function () { hasChanged = true; }
    element.onblur = function () {
        if (hasChanged) {
            alert("You need to change the value");

            // blur event can't actually be cancelled so refocus using a timer
            window.setTimeout(function () { element.focus(); }, 0);          
        }
        hasChanged = false;
    }
})();
Run Code Online (Sandbox Code Playgroud)


Kev*_*ady 5

onblur事件中,您可以将与value进行比较,defaultValue以确定是否发生了更改:

<input onblur="if(this.value!=this.defaultValue){alert('changed');}">
Run Code Online (Sandbox Code Playgroud)

defaultValue将包含初始的对象的值,而value将包含当前的对象的值的变化已作出之后

参考文献:

值与默认值

  • 在这种情况下,每个当前值都将不同于defaultValue。应该不能正常工作 (2认同)
  • 此方法仅有效一次。在第二次更改时,该值将与最开始字段中的值进行比较,而不是与更改之前字段中的值进行比较。 (2认同)

Léo*_*ier 5

为什么不在输入元素上维护一个自定义标志呢?

\n\n
input.addEventListener(\'change\', () => input.hasChanged = true);\ninput.addEventListener(\'blur\', () =>\xc2\xa0\n{\n    if (!input.hasChanged) { return; }\n    input.hasChanged = false;\n    // Do your stuff\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

https://jsfiddle.net/d7yx63aj

\n