2

如果输入每个字符是数字,我正在尝试获取输入框的新值。但是下面示例中的 ajax 发送旧值而不是新输入的值。

例如,如果值为 1 并且我聚焦输入框,删除该值并按下 2,Ajax 将发送“1”。但我需要它发送“2”

HTML

<input type="text" class="quant-input" size="7" name="qty" value="1" onkeydown="change_qty();"/>

JavaScript

function change_qty(evt) {
    var charCode = event.keyCode
    if (charCode > 48 || charCode < 57) {
        jQuery.ajax("page.php", {
                type: "POST",
                data:'data='+$('.quant-input').val()
            });
        return true;
    } else {
        return false;
    }
}
4

5 回答 5

4

在 keyup 事件之前,该值不会更改。因此,您需要改用以下内容:

onkeyup="change_qty();"
于 2013-10-07T14:20:59.523 回答
0
onkeydown

当用户只需按下按钮时会调用你的函数,所以,首先它会调用你的函数,然后它会在输入中插入值。所以,你应该使用

onkeyup
于 2013-10-07T14:22:51.673 回答
0

您可以尝试onBlur="change_qty();"在将焦点从控件中移开后给您带来价值。或者,如果您不想离开文本框并需要更新的值,那onKeyUp很好

于 2013-10-07T14:25:48.250 回答
0

试试这些

使用任一:

  1. 使用onkeyup.
  2. 在您的情况下使用新的 html5input事件oninput

    <input oninput="change_qty();" ...>
    

查看this demo

关于绑定的一句话

您可以也应该为您的事件使用绑定而不是属性:

而不是:<input onkeyup="change_qty();" >

采用:

$('.quant-input').keyup( change_qty );

或者

$('.quant-input').on( 'input', change_qty );
于 2013-10-07T14:40:19.483 回答
0

您可以在发送 ajax 之前使用 onkeydown/onkeypress 进行一些验证(以支持复制粘贴和特殊键(例如 Enter),您需要额外的代码)

function change_qty() {
  let key = event.key;
  let oldval = event.target.value;
  let newval = oldval.slice(0,event.target.selectionStart) + key + oldval.slice(event.target.selectionEnd);
  
  console.clear();
  console.log("old value", oldval);
  console.log("new value", newval);

  // validation and ajax code

  // return false;   // will not allow to push key
  return true;       // will allow to push key
 
}
<input type="text" class="quant-input" size="7" name="qty" value="1" onkeydown="change_qty();"/>

于 2019-02-11T15:32:34.860 回答