2

我正在创建一个应用程序,它会在扫描条形码时告诉您产品的价格。基本上,当条形码被扫描时,它会进入文本字段,然后根据它是哪个条形码,textarea 将通过 javascript 将价格放入其中。我已经让它工作了,但我似乎无法创建某个变量来避免我以后查看大量代码。

这是我的javascript:

function showPrice() {
    var userInput = document.getElementById('barcode').value;
    var price = document.getElementById('textarea').innerHTML;
    if (userInput === "783466209834") {
        price = "16.99";
    } else {
        price = "Not a valid barcode";
    }
}

这是我的 HTML:

<input type="text" name="text" class="textinput" id="barcode">
<input type="button" onclick="showPrice()" value="Submit">
<textarea name="" cols="" rows="" readonly="readonly" id="textarea"></textarea>

现在,我的代码不起作用,但如果我删除

var price = document.getElementById('textarea').innerHTML;  

并分别替换 if 语句中的“价格”,然后它就起作用了。我不确定为什么我不能创建这个价格变量。

4

5 回答 5

3

因为您将 的存储为innerHTML变量,而不是存储对它的引用

将其更改为var textarea = document.getElementById('textarea');然后textarea.innerHTML = "16.99"等等。

于 2013-03-01T21:26:06.897 回答
3

您正在获取的 innerHTMLtextarea并将其存储在变量 中price。相反,您只需将元素存储在变量中,然后调用price.innerHTML将结果放入 DOM。像这样:

function showPrice() {
    var userInput = document.getElementById('barcode').value;
    var price = document.getElementById('textarea');
    if (userInput === "783466209834") {
        price.innerHTML = "16.99";
    } else {
        price.innerHTML = "Not a valid barcode";
    }
}

编辑:正如 talemyn 正确指出的那样,您应该使用.value而不是.innerHTML更改textareas 的内容。虽然它看起来像做同样的事情,但使用.innerHTML.

于 2013-03-01T21:26:29.160 回答
3

如果你想使用 textarea 的值,你需要访问document.getElementById('textarea').value,而不是innerHTML.

而且,是的,正如其他人指出的那样,您希望将变量设置为引用元素,而不是值。然后您可以检索或设置元素的值。

于 2013-03-01T21:29:16.267 回答
-1

你不应该给它赋值price然后覆盖它......这就是你的代码正在做的事情。我相信您认为您是在 innerHTML 中创建一个存储位置?

相反,只需创建变量:

var price;

像以前一样运行代码;然后将结果放入页面中

document.getElementById("text area").innerHTML = price;
于 2013-03-01T21:26:42.037 回答
-2

你用两个不同的东西设置了两次“价格”变量。你实际上并没有改变 DOM。而是使用:

var price = document.getElementById('textarea');
if (userInput === "783466209834") {
    price.innerHTML = "16.99";
} else {
    price.innerHTML = "Not a valid barcode";
}
于 2013-03-01T21:26:58.740 回答