值方法不起作用函数回调
value method not working function callback
我正在创建一个 returns 数学方程式结果的小程序。我有一个带有 ID 和 CLASS "value1" 的数字输入字段(我试图同时使用两者进行操作),允许用户输入一个数字值。我有另一个数字输入字段,该字段使用显示方程式结果的 ID 和 CLASS "result1" 禁用。
我有一个 ID 为 solution1_btn 的按钮,单击该按钮会启动 "multiples" 函数回调,该回调将 "value1" 作为参数。
当我将 "value1" 替换为物理数字时,例如1000,等式的结果出现在 "result1" 没有 按 solution1_btn,但是当我把 "value1" 作为参数并按 solution1__btn 不行。
下面是 JavaScript 代码部分,我已将问题缩小到 HTML。
JS:
// declare Euler1 assign it to function with parameter num
// click button
var solution1 = document.getElementById("solution1_btn");
// user entered value
//var value1 = document.getElementById("value1");
var value1 = document.getElementsByClassName("result1")[0].value;
//console.log(value1);
// result input field
var result1 = document.getElementById("result1");
function multiples(num) {
// declare sum assign it value 0
var sum = 0;
// declare a for loop that iterates while the counter "i" is less than num
for (var i = 0; i < num; i++) {
// if statement test whether the division remainder of 3 and 5 are equal to 0
if (i % 3 || i % 5 === 0) {
// assigns the value of i to sum
sum += i;
var newSum;
result1.value = newSum;
newSum = sum;
};
};
// returns the value of sum from the function callback argument 1000 etc.
return newSum;
};
var fix = value1;
solution1.onclick = multiples(fix);
HTML:
<label for="value">Enter Value: </label>
<input id="value1" class="value1" type="number" title="value field" placeholder="e.g. 1000">
<button type="button" id="solution1_btn" title="solution 1 button">Enter</button>
<input id="result1" class="result1" type="number" disabled>
这是一个 fiddle 你的问题 - 我希望解决:http://jsfiddle.net/w0qvdqb2/
您的代码中有几个不同的问题,首先:
solution1.onclick = multiples(fix);
这意味着应该执行 multiples 方法并且 return 值被分配给变量 solution1.onclick 但 solution1.onclick 接受回调。
根据您的评论条件没有按照描述的那样写。
并混合输入和输出 类 和 ids。
请查看更新后的代码。
天哪,你的代码有很多问题,我会尝试 运行 解决所有问题。
引用 HTML 个元素
正如您所发现的,HTML 元素可以通过多种方式引用。通常,您应该选择最合适的并坚持使用。如果你使用一个 id 和一个 class 事情很快就会变得混乱 - 特别是看到 id 应该是唯一的,但 classes 不一定是这样。在你的情况下,我认为你最安全的是坚持使用 id,然后总是使用 document.getElementById
.
多重布尔检查
关于这行代码
if (i % 3 || i % 5 === 0) {
您可能认为这等同于 "if i is divisible by 3 or 5",这是布尔逻辑的逻辑部分(并且经常被误解)。实际上,你应该认为"if i is divisible by 3 or i is divisible by 5",相当于代码中的以下内容
if ((i % 3) === 0 || (i % 5) === 0) {
是的,遗憾的是您需要重复 === 0
部分两次。
可变范围
这是一个很大的主题,还有很多其他的 information on the subject,但足以说明在您的函数中 newSum
仅在 if
块中定义,并且在循环的每次迭代中都被重新定义,因此它不会包含您可能期望的总和。
无论如何,没必要,你应该return sum
function multiples(num) {
// declare sum assign it value 0
var sum = 0;
// declare a for loop that iterates while the counter "i" is less than num
for (var i = 0; i < num; i++) {
// if statement test whether the division remainder of 3 and 5 are equal to 0
if ((i % 3) === 0 || (i % 5) === 0) {
// assigns the value of i to sum
sum += i;
};
};
// returns the value of sum from the function callback argument 1000 etc.
return sum;
};
事件处理程序
您正在尝试使用此代码
设置要发生的事件onclick
solution1.onclick = multiples(fix);
这将尝试添加一个事件处理程序,其 调用 multiples
的结果 - 而不是 multiples
本身。您应该为事件处理程序分配一个函数,并将字段的 value
分配给调用 multiples
函数的 结果 .
solution1.onclick = function(){
result1.value = multiples(parseInt(value1.value,10));
};
工作示例
下面是您的代码的一个工作示例,希望能帮助您将所有这些整合在一起。
var solution1 = document.getElementById("solution1_btn");
var value1 = document.getElementById("value1");
var result1 = document.getElementById("result1");
function multiples(num) {
// declare sum assign it value 0
var sum = 0;
// declare a for loop that iterates while the counter "i" is less than num
for (var i = 0; i < num; i++) {
// if statement test whether the division remainder of 3 and 5 are equal to 0
if ((i % 3) === 0 || (i % 5) === 0) {
// assigns the value of i to sum
sum += i;
};
};
// returns the value of sum from the function callback argument 1000 etc.
return sum;
};
solution1.onclick = function(){
result1.value = multiples(parseInt(value1.value,10));
}
<label for="value">Enter Value: </label>
<input id="value1" class="value1" type="number" title="value field" placeholder="e.g. 1000">
<button type="button" id="solution1_btn" title="solution 1 button">Enter</button>
<input id="result1" class="result1" type="number" disabled>
我正在创建一个 returns 数学方程式结果的小程序。我有一个带有 ID 和 CLASS "value1" 的数字输入字段(我试图同时使用两者进行操作),允许用户输入一个数字值。我有另一个数字输入字段,该字段使用显示方程式结果的 ID 和 CLASS "result1" 禁用。
我有一个 ID 为 solution1_btn 的按钮,单击该按钮会启动 "multiples" 函数回调,该回调将 "value1" 作为参数。
当我将 "value1" 替换为物理数字时,例如1000,等式的结果出现在 "result1" 没有 按 solution1_btn,但是当我把 "value1" 作为参数并按 solution1__btn 不行。
下面是 JavaScript 代码部分,我已将问题缩小到 HTML。
JS:
// declare Euler1 assign it to function with parameter num
// click button
var solution1 = document.getElementById("solution1_btn");
// user entered value
//var value1 = document.getElementById("value1");
var value1 = document.getElementsByClassName("result1")[0].value;
//console.log(value1);
// result input field
var result1 = document.getElementById("result1");
function multiples(num) {
// declare sum assign it value 0
var sum = 0;
// declare a for loop that iterates while the counter "i" is less than num
for (var i = 0; i < num; i++) {
// if statement test whether the division remainder of 3 and 5 are equal to 0
if (i % 3 || i % 5 === 0) {
// assigns the value of i to sum
sum += i;
var newSum;
result1.value = newSum;
newSum = sum;
};
};
// returns the value of sum from the function callback argument 1000 etc.
return newSum;
};
var fix = value1;
solution1.onclick = multiples(fix);
HTML:
<label for="value">Enter Value: </label>
<input id="value1" class="value1" type="number" title="value field" placeholder="e.g. 1000">
<button type="button" id="solution1_btn" title="solution 1 button">Enter</button>
<input id="result1" class="result1" type="number" disabled>
这是一个 fiddle 你的问题 - 我希望解决:http://jsfiddle.net/w0qvdqb2/
您的代码中有几个不同的问题,首先:
solution1.onclick = multiples(fix);
这意味着应该执行 multiples 方法并且 return 值被分配给变量 solution1.onclick 但 solution1.onclick 接受回调。
根据您的评论条件没有按照描述的那样写。
并混合输入和输出 类 和 ids。
请查看更新后的代码。
天哪,你的代码有很多问题,我会尝试 运行 解决所有问题。
引用 HTML 个元素
正如您所发现的,HTML 元素可以通过多种方式引用。通常,您应该选择最合适的并坚持使用。如果你使用一个 id 和一个 class 事情很快就会变得混乱 - 特别是看到 id 应该是唯一的,但 classes 不一定是这样。在你的情况下,我认为你最安全的是坚持使用 id,然后总是使用 document.getElementById
.
多重布尔检查
关于这行代码
if (i % 3 || i % 5 === 0) {
您可能认为这等同于 "if i is divisible by 3 or 5",这是布尔逻辑的逻辑部分(并且经常被误解)。实际上,你应该认为"if i is divisible by 3 or i is divisible by 5",相当于代码中的以下内容
if ((i % 3) === 0 || (i % 5) === 0) {
是的,遗憾的是您需要重复 === 0
部分两次。
可变范围
这是一个很大的主题,还有很多其他的 information on the subject,但足以说明在您的函数中 newSum
仅在 if
块中定义,并且在循环的每次迭代中都被重新定义,因此它不会包含您可能期望的总和。
无论如何,没必要,你应该return sum
function multiples(num) {
// declare sum assign it value 0
var sum = 0;
// declare a for loop that iterates while the counter "i" is less than num
for (var i = 0; i < num; i++) {
// if statement test whether the division remainder of 3 and 5 are equal to 0
if ((i % 3) === 0 || (i % 5) === 0) {
// assigns the value of i to sum
sum += i;
};
};
// returns the value of sum from the function callback argument 1000 etc.
return sum;
};
事件处理程序
您正在尝试使用此代码
设置要发生的事件onclick
solution1.onclick = multiples(fix);
这将尝试添加一个事件处理程序,其 调用 multiples
的结果 - 而不是 multiples
本身。您应该为事件处理程序分配一个函数,并将字段的 value
分配给调用 multiples
函数的 结果 .
solution1.onclick = function(){
result1.value = multiples(parseInt(value1.value,10));
};
工作示例
下面是您的代码的一个工作示例,希望能帮助您将所有这些整合在一起。
var solution1 = document.getElementById("solution1_btn");
var value1 = document.getElementById("value1");
var result1 = document.getElementById("result1");
function multiples(num) {
// declare sum assign it value 0
var sum = 0;
// declare a for loop that iterates while the counter "i" is less than num
for (var i = 0; i < num; i++) {
// if statement test whether the division remainder of 3 and 5 are equal to 0
if ((i % 3) === 0 || (i % 5) === 0) {
// assigns the value of i to sum
sum += i;
};
};
// returns the value of sum from the function callback argument 1000 etc.
return sum;
};
solution1.onclick = function(){
result1.value = multiples(parseInt(value1.value,10));
}
<label for="value">Enter Value: </label>
<input id="value1" class="value1" type="number" title="value field" placeholder="e.g. 1000">
<button type="button" id="solution1_btn" title="solution 1 button">Enter</button>
<input id="result1" class="result1" type="number" disabled>