【问题标题】:How to get value from input field with Javascript?如何使用 Javascript 从输入字段中获取值?
【发布时间】:2019-03-06 02:26:53
【问题描述】:

如何使用 Javascript 获取特定输入字段的值?

我们以这个 shopify 商店为例:https://geekymate.com/products/magic-doormat-1?variant=18941211607138

我正在尝试创建一个脚本,该脚本会根据数量字段中填写的数量自动应用折扣代码。

但要做到这一点,我需要能够获得该字段的最新值。 获取最新/当前值的代码是什么样的?

编辑:感谢您提出问题的提示。我确实知道我需要使用 getElementById (对于上面的链接页面,它将是这样的: var x = document.getElementById("Quanity").value; )但是如果最终用户正在更改,我如何始终自动获取最新输入价值?

【问题讨论】:

  • 感谢您提出问题的提示。我知道我需要使用 getElementById 但是如果最终用户正在更改值,我如何始终自动获取最新输入?
  • 你有没有想过为 keyup 设置一个事件监听器?
  • @Elliot 感谢您的评论。你介意多解释一点吗?我仍然是 javascript 的初学者,我还不是很熟悉它。刚开始学。

标签: javascript data-extraction


【解决方案1】:

其他答案也是正确的(使用jQuery .keyup),但您也可以使用下面的这个解决方案(更好)。此解决方案使用纯 JavaScript。

代码使用.getElementById()选择元素,并在输入变化时使用.addEventListener()做某事。

var text = document.getElementById("text");
window.onload = function() {
  text.addEventListener("input", function() {
    console.log(text.value);
  });
}
<input id="text" />

或者,如果您想要一个 jQuery 解决方案,您可以使用以下内容。这使用 jQuery .bind()

$("#text").bind("input", function() {
  console.log($("#text").val());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="text" />

【讨论】:

  • 没想到这么容易实现!这确实表明我仍然处于学习 javascript 和 jquery 的初级阶段。非常感谢详细的解释和测试它们的代码sn-ps!
  • 我刚遇到这个错误:无法读取 null 的属性“addEventListener”。据我了解,可能会导致错误,因为脚本在 DOM 完成加载之前已经执行。那是对的吗 ?如果是,如何确保它在 DOM 完成加载后执行?
  • @Salexes 它要么意味着您尝试添加事件侦听器的元素不存在,要么是。 DOM 尚未加载。我更新了我的解决方案。在这种情况下,您应该像我在更新的答案中所做的那样将window.onload 放在前面。 developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/…, stackoverflow.com/questions/807878/…
【解决方案2】:

keyup() 函数 ;)

它每次在用户输入新文本时运行。 此外,您还可以使用input()change() 函数。

在 jQuery 中它是这样工作的:

$(document).on('keyup', '#InputID', function(){
    //...code...
    var discount = Number( document.getElementById('InputID').value )*10/100;
});

【讨论】:

    【解决方案3】:

    这是一个在按键上运行的 Jquery 函数。我在下面添加了一个 sn-p,以查看它如何与输入字段相关联。

    $('#code').keyup(function() {
        var discountcode = this.value;
        console.log(discountcode);
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <input id="code" type="test" />

    每次提升特定元素时都会运行 Keyup。想象一下有人输入“你好”

    您将看到以下记录:

    'H''他''Hel''地狱''你好'

    【讨论】:

    • @AniketG 我正在详细说明我的评论,并且在我看到下面的答案之前仍在写它。由于它有一个代码 sn-p 并且彼此之间发布了 2 分钟,所以我认为这没什么大不了的。
    • 您可以根据需要保留它。我只知道我讨厌的一件事是看到多个答案(相同)。就像我在其他场合所做的那样,我赞成最先上升的那个。另一个是哪个
    【解决方案4】:

    查看代码 sn-p。使用 JavaScript 获取值。并且可以使用addEventListener 检测变化并使用detectChange 函数获取最新值。

    var discount = [];
    
    function detectChange() {
      var table = document.getElementsByClassName("shappify_qb_grid")[0];
    
      for (var i = 0; i < table.rows.length; i++) {
        var row = "";
        for (var j = 0; j < table.rows[i].cells.length; j++) {
          if (j == 1) {
            row = table.rows[i].cells[j].innerHTML;
            rate = parseFloat(row);
            if (rate && discount.indexOf(rate) < 0) {
              discount.push(parseFloat(row));
              console.log('---', parseFloat(row));
            }
          }
          // console.log('discount : ', discount);
        }
      }
    }
    
    detectChange();
    console.log('discount : ', discount);
    <table class="shappify_qb_grid" border=1>
    <thead>
    	<tr>
    		<th>Qty</th>
    		<th>Discount</th>
    	</tr>
    </thead>
    <tbody>
    	<tr>
    		<td>Buy 1</td>
    		<td>0% Off</td>
    	</tr>
    	<tr>
    		<td>Buy 2</td>
    		<td>10% Off</td>
    	</tr>
    	<tr>
    		<td>Buy 4</td>
    		<td>12% Off</td>
    	</tr>
    	<tr>
    		<td>Buy 5</td>
    		<td>14% Off</td>
    	</tr>
    	<tr>
    		<td>Buy 6</td>
    		<td>17% Off</td>
    	</tr>
    </tbody>
    </table>

    【讨论】:

    • 只是为了确保我理解您正确发布的代码。如果我将数量输入字段更改为例如4 会自动关联12%的折扣吗?还是个 javascript 初学者,所以我只想确保理解代码的每一步
    【解决方案5】:

    使用document.getElementById(); -command 获取 HTML 页面中引用的元素的存在。然后使用在原始 HTML 编码规则中分配属性的相同技术。

    使用document.getElementById('able').value = 'whatever';

    【讨论】:

    • 问题是关于获取价值,而不是改变价值。还有一年多前的答案解释了如何做到这一点。
    【解决方案6】:

    这对我有用!

    document.getElementById("text").value;
    
    <input id="text" />
    

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      相关资源
      最近更新 更多