【问题标题】:Why I can't use object functions from a global variable?为什么我不能使用全局变量中的对象函数?
【发布时间】:2015-03-03 06:55:00
【问题描述】:

大家好^^
我想使用函数来创建输入,但就像对象(用于创建可自定义的输入)一样,之后将它们分配给一个变量,例如“名称”。 之后我想使用他们的功能(创建和检查)第一个在HTML代码的div“userInfo”中插入一个输入,第二个检查输入内的值

问题是当我将一个对象分配给全局变量“name”,然后我使用它们的函数时,浏览器的控制台告诉我 name.create() 不是一个函数,我不能使用它

对不起,我糟糕的英语和 JavaScript xD 的菜鸟水平
谢谢大家^^

function createAll() {

  name = new textInput("nameInput", 8, 24, "a-Z0-9", "required");
  concatFirst += name.create();
  document.getElementById("userInfo").innerHTML = concatFirst;
  console.log(JSON.stringify(name));
}

function textInput(idInput, minlenght, maxlenght, req, requiredOption) {

  this.idIn = idInput;
  this.minLong = minlenght;
  this.maxLong = maxlenght;
  this.reqCha = req;
  this.requiredOpt = requiredOption;
  this.create = function () {
  return "<p> \
          <input id='" + this.idIn + "' pattern='[" + this.reqCha + "]{" + this.minLong + ",}' maxlenght='" + this.maxLong + "' " + " onchange='name.check()' onmouseover='name.check()' " + this.requiredOpt + " ></input> \
          </p>";
  }
  this.check = function () {

    document.getElementById(this.idIn).style.boxShadow = "0 0 10px 3px green";
  }
}
<html>
  <body onload="createAll();">
    <div id="mainForm">
        <!-- First Form -->
        <div id="userInfo">
        </div>
    </div>
  </body>
</html>

【问题讨论】:

  • "... 例如 'name'" - 你尝试过其他变量吗?可能名称“名称”是您的问题的原因。

标签: javascript html function object input


【解决方案1】:

全局符号“名称”是window 对象的固有属性,浏览器不允许您将其更改为字符串。

您可以使用不同的名称(如“naem”),一切正常。当然,选择一个已经被用作window 对象的另一个内在名称的名称是有风险的。这整个情况是一个很好的对象教训,说明为什么 JavaScript 客户端代码中的全局变量是不可取的:环境是一个潜在冲突的雷区,就像你遇到的那样。

【讨论】:

  • 或者他可以只使用var name 使其成为局部变量。
  • @Barmar 他的“onfoo”属性依赖于它是一个全局符号。真的,我认为出于各种原因,整个事情都需要重构。
  • 谢谢,我更改了变量的名称,现在可以正常工作了:D
  • @Pointy createAll 必须是全局的,name 不是。
  • @Barmar ??向右滚动; “textInput”函数创建的HTML中有“onchange”和“onmouseover”属性(也许我误解了代码)
猜你喜欢
  • 1970-01-01
  • 2021-06-20
  • 2018-12-29
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多