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

Javascript 如何检查模糊事件中的值是否已更改?,javascript,dom-events,onblur,Javascript,Dom Events,Onblur,基本上,我需要检查“模糊”事件的文本框中的值是否已更改,以便如果值未更改,我希望取消模糊事件 如果可以检查,则在输入HTML元素的模糊事件中,值会由用户更改?我认为没有本机方法可以做到这一点。我要做的是,向focus事件添加一个函数,将当前值保存到附加到元素的变量中(element.oldValue=element.value)。您可以在模糊上检查该值。您不能取消模糊事件,您需要在计时器中重新聚焦。您可以在焦点上设置变量,也可以在更改事件上设置hasChanged变量。模糊事件在更改事件之后触发

基本上,我需要检查“模糊”事件的文本框中的值是否已更改,以便如果值未更改,我希望取消模糊事件


如果可以检查,则在输入HTML元素的模糊事件中,值会由用户更改?

我认为没有本机方法可以做到这一点。我要做的是,向
focus
事件添加一个函数,将当前值保存到附加到元素的变量中(
element.oldValue=element.value
)。您可以在模糊上检查该值。

您不能取消模糊事件,您需要在计时器中重新聚焦。您可以在焦点上设置变量,也可以在更改事件上设置
hasChanged
变量。模糊事件在更改事件之后触发(不幸的是,在这种情况下),否则您可以在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;
    }
})();

使用Jquery事件,我们可以实现这一逻辑

步骤1:声明一个变量以比较值

var  lastVal ="";
步骤2:在焦点上从表单输入中获取最后一个值

  $("#validation-form :input").focus(function () {
                 lastVal = $(this).val();

  });
步骤3:在模糊上比较它

$("#validation-form :input").blur(function () {
                 if (lastVal != $(this).val())
                 alert("changed");
             });
您可以使用以下代码:

var Old_Val;
var Input_Field = $('#input');

Input_Field.focus(function(){
     Old_Val = Input_Field.val();
});

Input_Field.blur(function(){
    var new_input_val = Input_Field.val();
    if (new_input_val != Old_Val){
          // execute you code here
    }
});

我知道这已经很旧了,但我想我应该把它放在万一有人想要替代品的地方。这看起来很难看(至少对我来说),但要处理浏览器处理-1索引的方式才是挑战所在。是的,我知道使用jquery.data可以做得更好,但我还不太熟悉

以下是HTML代码:

<select id="selected">
  <option value="1">A</option>
  <option value="2">B</option>
  <option value="3">C</option>
</select>

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


默认值
将包含对象的初始值,而
将包含更改后对象的当前值

参考资料:


类似这样的事情。使用Kevin Nadsady的上述建议

这就是价值=这是默认值

我在一堆输入上使用共享CSS类,然后执行以下操作:

    for (var i = 0; i < myInputs.length; i++) {
        myInputs[i].addEventListener('blur', function (evt) {
            if(this.value!=this.defaultValue){
                //value was changed now do your thing
            }
        });
        myInputs[i].addEventListener('focus', function (evt) {
            evt.target.setAttribute("value",evt.target.value);
        });
    }
for(变量i=0;i
即使这是一篇老文章,我想我还是会与大家分享一种使用简单javascript实现这一点的方法

javascript部分:


函数HideLabel(txtField){
if(txtField.name=='YOURBOXNAME'){
if(txtField.value=='YOURBOXNAME')
txtField.value='';
其他的
txtField.select();
}
}
函数ShowLabel(YOURBOXNAME){
if(txtField.name=='YOURBOXNAME'){
如果(txtField.value.trim()='')
txtField.value='YOURDEFAULTVALUE';
}
}

与@Kevin Nadsady的帖子类似,以下内容将在原生JS函数和JQuery侦听器事件中使用。在onblur事件中,您可以将该值与defaultValue进行比较:

 $(".saveOnChange").on("blur", function () {
     if (this.value != this.defaultValue) {
         //Set the default value to the new value
         this.defaultValue = this.value;
         //todo: save changes
         alert("changed");
     }
 });

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

input.addEventListener('change', () => input.hasChanged = true);
input.addEventListener('blur', () => 
{
    if (!input.hasChanged) { return; }
    input.hasChanged = false;
    // Do your stuff
});

我们的想法是使用一个隐藏字段来保留旧值,每当onblur事件发生时,检查更改并用当前文本值更新隐藏值

string html = "<input type=text id=it" + row["cod"] + "inputDesc value='"
                    + row["desc"] + "' onblur =\"if (this.value != document.getElementById('hd" + row["cod"].ToString() + 
                    "inputHiddenDesc').value){ alert('value change'); document.getElementById('hd" + row["cod"].ToString() + 
                    "inputHiddenDesc').value = this.value; }\"> " +
                    "<input type=hidden id=hd" + row["cod"].ToString() + "inputHiddenDesc value='" + row["desc"] + "'>";
string html=“”+
"";

“无法取消模糊事件”。我想他的意思是“如果(!hasChanged)返回false;”有隐藏字段的好字段;)不知道为什么这是例外答案,这是可以做到的,在下面的答案中,在这种情况下,每个当前值都将不同于defaultValue。不应该工作得很好
string html = "<input type=text id=it" + row["cod"] + "inputDesc value='"
                    + row["desc"] + "' onblur =\"if (this.value != document.getElementById('hd" + row["cod"].ToString() + 
                    "inputHiddenDesc').value){ alert('value change'); document.getElementById('hd" + row["cod"].ToString() + 
                    "inputHiddenDesc').value = this.value; }\"> " +
                    "<input type=hidden id=hd" + row["cod"].ToString() + "inputHiddenDesc value='" + row["desc"] + "'>";