如何在onkeydown之后输入值?

时间:2013-10-07 14:18:22

标签: javascript

我想在输入每个字符后尝试获取输入框的新值(如果它是一个数字)。但是下面例子中的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;
    }
}

5 个答案:

答案 0 :(得分:3)

直到keyup事件才会更改该值。所以你需要使用以下代码:

onkeyup="change_qty();"

答案 1 :(得分:0)

onkeydown
当用户只按下按钮时,

会调用你的功能,所以,首先它会调用你的功能,但它会在输入中插入值。所以,你应该使用

onkeyup

答案 2 :(得分:0)

您可以尝试onBlur="change_qty();",它会在从控件中离开焦点后为您提供值。或者,如果您不想离开文本框并需要更新的值,onKeyUp就可以了

答案 3 :(得分:0)

试试这些

使用:

  1. 使用onkeyup
  2. 在您的案例input中使用新的html5 oninput事件:

    <input oninput="change_qty();" ...>
    
  3. 查看 this demo

    关于绑定的一个词

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

    而不是: &lt; input onkeyup =&#34; change_qty();&#34; &gt;

    使用:

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

    或者

    $('.quant-input').on( 'input', change_qty );
    

答案 4 :(得分: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();"/>