【问题标题】:Capture values from select and text inputs using JS and return output to HTML使用 JS 从选择和文本输入中捕获值并将输出返回到 HTML
【发布时间】:2015-04-06 16:34:46
【问题描述】:

我有一个有点像计算器的表格。在文本框中输入一个数字,并使用下拉菜单,用户选择一个用作乘数的数字。 我可以正确地从文本框中捕获值,但是从选择输入中捕获值是很棘手的。

我希望在用户更改文本框中的数字或更改他们在选择字段中选择的选项时运行此功能。

FIDDLE

# HTML
<form>
    <input type="text" id="numberInput"></input>
    <select id="lengthInput">
        <option value="1">1</option>
        <option value="2">2</option>
    </select>
</form>
<div id="result"></div>

# JS
$(function () {
    var amount = $('#numberInput').val();
    var length_value = ''
    $('#lengthInput').on("change", function () {
        var length = document.getElementById("lengthInput");
        var length_value = length.options[length.selectedIndex].value;
    }).change();
    var calculatedAmount = amount * length_value;
    document.getElementById('result').innerHTML = amount
});

【问题讨论】:

  • var length_value = ''后加分号

标签: javascript jquery html


【解决方案1】:

你可以减少你必须做的事情:

$(function () {
    $(':input').on('change keyup',function () {
        $('#result').html($('#numberInput').val() * $('#lengthInput').val());
    })
});

jsFiddle example

【讨论】:

  • 我喜欢:input 选择器。需要注意的一点是,这将为 all 表单元素添加一个事件处理程序,但如果 html 与显示的 OP 一样简单,那么该选择器就是老板 :)
  • @KJPrice - 是的。如果OP需要限制的话,可以把$(':input')改成$('#numberInput, #lengthInput')
【解决方案2】:

要将事件添加到您的 inputselect:将 $('#lengthInput').on("change", function () { 更改为

$('#lengthInput, #numberInput').on("change input", function () {

然后将您的amount 代码放入回调中。完整代码如下:

$(function () {
    $('#lengthInput, #numberInput').on("change input", function () {
        var amount = $('#numberInput').val();
        var length = $("#lengthInput").val();// <-simplified
        var calculatedAmount = amount * length;
        document.getElementById('result').innerHTML = calculatedAmount
    }).change();

});

【讨论】:

  • keyup 将是用于文本输入的事件的更好选择。 change 不会针对文本触发,在大多数用户代理上,直到用户将焦点移出输入(当触发 blur 时)。 change 适用于收音机,只要元素被选中就会触发。
  • 啊,好点子。 input 不会赶上keyup 事件吗?
  • 实际上chage 用于选择,inputkeyup 用于输入文本的更好选择,因为它适用于粘贴文本(通过右键单击),而且速度更快。
  • 啊,是的,我想会的。不过,根据我的经验,onInput 并不是很常用。我必须查看规范以查看它何时被触发。
  • 我必须看到一些“更快”评论的基准,但是是的,它看起来确实是一种有效的方法。我收回我最初的评论,也给你一个 +1 :)
猜你喜欢
  • 2015-09-24
  • 1970-01-01
  • 2011-01-30
  • 2021-03-08
  • 2017-09-26
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
相关资源
最近更新 更多