Javascript 保存输入值,以便如果用户保留为空,它将恢复为默认值

Javascript 保存输入值,以便如果用户保留为空,它将恢复为默认值,javascript,for-loop,Javascript,For Loop,我已经尝试创建一个变量oldValue,如果当前值==”,那么它将变回oldValue,因为我使用for循环,我可以显式地说出值是什么 代码正在更改input元素周围的div,这就是为什么存在.parentNode 有谁能告诉我如何获取输入值并保存它,或者我的代码哪里出错了 var inputFocus = function(){ var inputs = document.getElementsByClassName("inputNoFocus"); for (i = 0; i < in

我已经尝试创建一个变量
oldValue
,如果当前值
==”
,那么它将变回
oldValue
,因为我使用
for
循环,我可以显式地说出值是什么

代码正在更改
input
元素周围的
div
,这就是为什么存在
.parentNode

有谁能告诉我如何获取输入值并保存它,或者我的代码哪里出错了

var inputFocus = function(){
var inputs = document.getElementsByClassName("inputNoFocus");
for (i = 0; i < inputs.length; i++){
    var input = inputs[i];
    var oldValue = this.value;

    input.addEventListener("focus", function(){

        if(this.value === this.value){
            this.value = "";
        }
        this.parentNode.parentNode.setAttribute("class", "inputFocus");
    }, false);

    input.addEventListener("blur", function(){
        if(this.value === ""){
            this.value = oldValue;
        }
        this.parentNode.parentNode.setAttribute("class", "noHover");
    }, false);
}
}();
var inputFocus=function(){
var inputs=document.getElementsByClassName(“inputNoFocus”);
对于(i=0;i
我不确定您想做什么,但据我所知——事件侦听器中函数中的this.value的值将返回
null
——原因是JavaScript中的作用域。值
this.value
的范围将在父函数中,而不是在eventlisters匿名函数中定义的函数中


试着阅读,你会理解作用域以及你可能出错的原因或地方。

我不确定你想做什么,但据我所知——事件侦听器中函数中的this.value的值将返回
null
——原因是JavaScript中的作用域。值
this.value
的范围将在父函数中,而不是在eventlisters匿名函数中定义的函数中

试着阅读,你会明白范围界定,以及你可能出错的原因或地方。

试试以下方法:

(function() {
  var inputs = document.getElementsByClassName("inputNoFocus");

  function setEmptyVal() {
    if (this.value == this.defaultValue) this.value = "";
    this.parentNode.parentNode.setAttribute("class", "inputFocus");
  }

  function setDefaultVal() {
    if (this.value == "") this.value = this.defaultValue;
    this.parentNode.parentNode.setAttribute("class", "noHover");
  }

  for (i=0; i<inputs.length; i++) {
    var input = inputs[i];

    input.defaultValue = input.value;
    input.addEventListener("focus", setEmptyVal, false);
    input.addEventListener("blur", setDefaultVal, false);
  }
})();
(函数(){
var inputs=document.getElementsByClassName(“inputNoFocus”);
函数setEmptyVal(){
如果(this.value==this.defaultValue)this.value=“”;
this.parentNode.parentNode.setAttribute(“类”、“inputFocus”);
}
函数setDefaultVal(){
如果(this.value==“”)this.value=this.defaultValue;
this.parentNode.parentNode.setAttribute(“class”,“noHover”);
}
对于(i=0;i试试这个:

(function() {
  var inputs = document.getElementsByClassName("inputNoFocus");

  function setEmptyVal() {
    if (this.value == this.defaultValue) this.value = "";
    this.parentNode.parentNode.setAttribute("class", "inputFocus");
  }

  function setDefaultVal() {
    if (this.value == "") this.value = this.defaultValue;
    this.parentNode.parentNode.setAttribute("class", "noHover");
  }

  for (i=0; i<inputs.length; i++) {
    var input = inputs[i];

    input.defaultValue = input.value;
    input.addEventListener("focus", setEmptyVal, false);
    input.addEventListener("blur", setDefaultVal, false);
  }
})();
(函数(){
var inputs=document.getElementsByClassName(“inputNoFocus”);
函数setEmptyVal(){
如果(this.value==this.defaultValue)this.value=“”;
this.parentNode.parentNode.setAttribute(“类”、“inputFocus”);
}
函数setDefaultVal(){
如果(this.value==“”)this.value=this.defaultValue;
this.parentNode.parentNode.setAttribute(“class”,“noHover”);
}

对于(i=0;i
if(this.value===this.value)
这对你有什么作用?总是
TRUE
this.value===this.value
,这将永远是真的。这不应该是旧值吗?(在你的焦点事件中)我很困惑,因为我需要它来检查所有可能类似“密码”或“用户名”的值如果用户将该值更改为“”,我希望它返回为其默认值,或者如果用户将其更改为“”以外的任何值我希望它保持在用户值上……你的问题之一是你没有以任何有意义的方式存储
oldValue
。你需要将它与相应的
相关联。问题的另一部分是你使用
这个
的方式完全错误。@Tomalak是的,我意识到了这一点,现在我已经解决了它!谢谢你的帮助但是我们的帮助!
如果(this.value===this.value)
这对你有什么作用?总是
TRUE
this.value===this.value
,这将永远是真的。这不应该是oldValue吗?(在你的焦点事件中)我很困惑,因为我需要它来检查所有的值,比如“密码”或“用户名”如果用户将该值更改为“”,我希望它返回为其默认值,或者如果用户将其更改为“”以外的任何值我希望它保持在用户值上……你的问题之一是你没有以任何有意义的方式存储
oldValue
。你需要将它与相应的
相关联。问题的另一部分是你使用
这个
的方式完全错误。@Tomalak是的,我意识到了这一点,现在我已经解决了它!谢谢你的帮助我们的帮助!谢谢你帮了我很大的忙!现在开始工作了。谢谢你帮了我很大的忙!现在开始工作了。@jamcoupe一定要花点时间看看它是怎么工作的。@jamcoupe一定要花点时间看看它是怎么工作的。