我想在输入每个字符后尝试获取输入框的新值(如果它是一个数字)。但是下面例子中的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;
}
}
答案 0 :(得分:3)
直到keyup事件才会更改该值。所以你需要使用以下代码:
onkeyup="change_qty();"
答案 1 :(得分:0)
onkeydown
当用户只按下按钮时,会调用你的功能,所以,首先它会调用你的功能,但它会在输入中插入值。所以,你应该使用
onkeyup
答案 2 :(得分:0)
您可以尝试onBlur="change_qty();"
,它会在从控件中离开焦点后为您提供值。或者,如果您不想离开文本框并需要更新的值,onKeyUp
就可以了
答案 3 :(得分:0)
使用:
onkeyup
。在您的案例input
中使用新的html5 oninput
事件:
<input oninput="change_qty();" ...>
查看 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();"/>