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"] + "'>";