【问题标题】:onclick function getInc not definedonclick 函数 getInc 未定义
【发布时间】:2019-12-03 23:25:28
【问题描述】:

我正在创建我的第一个网络应用程序,并且很早就遇到了问题!

我创建了一个函数,该函数将用户键入的信息提取到 HTML 输入字段中。它应该工作的方式是,当用户输入他们的收入并单击提交按钮时,收入将存储在一个变量中,供我在我的 JavaScript 代码的其余部分使用。 查看控制台日志,该函数显示为“未定义”。

我很欣赏代码可能不是很干净,但我只是想让它工作,因为这是我的第一个小项目!

任何想法我哪里出错了?

这是 HTML:

<div class="row input-1">           
    <label for="Gross Annual Salary">£</label>
    <input type="number" name="Gross Annual Salary" id="Ann-Sal" placeholder="Gross Annual Salary" required>
    <input type="button" class="submit-btn" value="Submit" onclick="getInc();">                                              
</div>

这是 JavaScript:

function getInc() {
    var inc = document.getElementById("Ann-Sal");
}

【问题讨论】:

  • 您必须确保 JavaScript 在 HTML 被解析到内存之后运行。最好的方法是将 script 标签放在结束 body 标签 (&lt;/body&gt;) 之前。
  • 问题很可能在于您的 javascript 和 HTML 的链接方式。您的 HTML 文件中的
  • @ScottMarcus 在这种情况下位置重要吗? onclick 的值在实际发生点击之前不会被解析。到那时,无论脚本标签在哪里,都应该定义getInc。我的猜测是它是一个外部 js 文件,它实际上无法加载
  • 在你的 html 中有一个分号 onclick=„getInc()“ 这不应该在那里

标签: javascript html


【解决方案1】:

我从 onclick 端删除了分号,它可以工作

<div class="row input-1">
  <label for="Gross Annual Salary">£</label>
  <input type="number" name="Gross Annual Salary" id="Ann-Sal" placeholder="Gross Annual Salary" required>
  <input type="button" class="submit-btn" value="Submit" onclick="getInc()">
</div>


<script>
  function getInc() {
    console.log('works');
    var inc = document.getElementById("Ann-Sal");
  }
</script>

<script>
  function getInc() {
    console.log('works');
    var inc = document.getElementById("Ann-Sal");
  }
</script>

<div class="row input-1">
  <label for="Gross Annual Salary">£</label>
  <input type="number" name="Gross Annual Salary" id="Ann-Sal" placeholder="Gross Annual Salary" required>
  <input type="button" class="submit-btn" value="Submit" onclick="getInc()">
</div>

【讨论】:

  • 分号在这里没有区别。您的答案假定 script 元素出现在 HTML 之后,而且很可能不是这种情况,因此存在问题。
【解决方案2】:

首先确保在正文之后有&lt;script&gt;(即:把它放在最后一个关闭&lt;div&gt; 之后),其次,如果你想要用户输入的内容,你应该得到元素值。当您将inc 设置为等于document.getElementById("Ann-Sal"); 时,您给它的是DOM 元素而不是它的值,您应该输入:

function getInc() {
    var inc = document.getElementById("Ann-Sal");
}

然后你会得到用户输入到代码中的值。

另外,提示使用addEventListener() 而不是 onclick 属性,这是更好的做法。

【讨论】:

  • 不,您不需要删除分号。
  • @ScottMarcus 已修复。
  • 脚本标签不应位于body 之后。它应该在结束 body 标记之前。请注意答案中的措辞。
【解决方案3】:

好的,所以我尝试使用上面的一些 Tom O 的代码自己修复它:

var buttonEl = document.querySelector('input[type="button"]');

var inputEl = document.getElementById("Ann-Sal");

var annInc;

function clickHandler() {

    annInc = parseFloat(inputEl.value);
    console.log(annInc);
}

buttonEl.addEventListener('click', clickHandler);

HTML:

<div class="row input-1">

                        <label for="Gross Annual Salary">£</label>
                        <input type="number" name="Gross Annual Salary" id="Ann-Sal" placeholder="Gross Annual Salary" required>
                        <input type="button" class="submit-btn" value="Submit">


                    </div>

这不起作用。将收入提交到输入字段时,没有错误消息,但没有任何内容记录到控制台。

然后我将 Javascript 代码重新配置为:

var buttonEl = document.querySelector('input[type="button"]');

var inputEl = document.getElementById("Ann-Sal");

var annInc;

function clickHandler() {
    if (!inputEl.value.length) {
        console.error('A salary is required!');
        return;
    }

    annInc = parseFloat(inputEl.value);

    console.log(annInc);
}

buttonEl.addEventListener('click', clickHandler);

然后就可以了。我之前没有使用 if 语句来验证用户输入,因为我在我的 HTML 代码中的 input 元素中使用了“required”,这基本上做同样的事情对吗?所以我猜测代码不起作用的原因是因为没有使用'return'语句?

有人可以向我解释为什么 return 语句可以使它起作用吗?

我敢肯定,对于你们中的一些有经验的人来说,我缺乏理解一定会让你们很痛苦!不过,我非常决心解决这个问题。

非常感谢

【讨论】:

    【解决方案4】:

    除了其他答案,我只想指出您的函数中缺少.value,否则您将无法获得价值。

    function getInc() {
        var inc = document.getElementById("Ann-Sal").value
    }
    

    【讨论】:

    • 感谢您的所有帮助,明天将尝试您的建议,让您知道我的进展情况。很高兴看到我收到的所有有用的回复,非常感谢!
    猜你喜欢
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    相关资源
    最近更新 更多