第一的:
您需要使用该.value
属性来获取元素的值。
改变:
var bread_r = bread_choice * bread_weight;
至:
var bread_r = bread_choice.value * bread_weight.value;
在您的原始代码中,bread_choice
并且bread_weight
是对 DOM 元素的引用。当您尝试将它们相乘时,这将不是数字结果。
您正在尝试获取它们的值(在下拉列表中选择的内容以及在文本框中输入的内容),因此您应该使用.value
.
这与您的下一行类似,您在其中使用设置元素bread_results
的值.value = bread_r
。
第二:
您的<select>
元素没有id
“面包棒”,它有name
. 因此,将您的元素更改为:
<select id='breadstick' name='breadstick'>
或将您对元素的检索更改为:
var bread_choice = document.querySelector('select[name="breadstick"]');
第三:
由于您使用的是内联事件处理程序onkeyup
,因此您已经在传递this.value
,这意味着文本框的值。因此,您不需要在函数中获取文本框及其值。只需添加一个参数并使用它。
function do_calc3(bread_weight) {
var bread_choice = document.getElementById('breadstick').value;
var bread_r = bread_choice * bread_weight;
document.getElementById("bread_results").value = bread_r;
}
第四:
您不应该使用内联事件处理程序。由于许多原因,最好在 Javascript 代码中处理事件。这是我如何设置它的示例。(请注意,onkeyup="do_calc3(this.value);"
已在 Javascriptwindow.onload
事件中删除并完成)
function do_calc3() {
var bread_choice = document.getElementById('breadstick');
var bread_weight = this;
var bread_r = bread_choice.value * bread_weight.value;
if (isNaN(bread_r)) {
bread_r = "Invalid";
}
document.getElementById("bread_results").value = bread_r;
}
function addEvent(element, eventName, callback) {
if (element.addEventListener) {
element.addEventListener(eventName, callback, false);
} else if (element.attachEvent) {
element.attachEvent("on" + eventName, callback);
} else {
element["on" + eventName] = callback;
}
}
window.onload = function () {
var textbox = document.getElementById("input_bread");
addEvent(textbox, "keyup", do_calc3);
};
演示:http: //jsfiddle.net/Gtven/4/