我想在输入字段长度为15时立即调用ajax调用(现在我只是放入一个警告框来代替.ajax {}),但是警报框直到我才开始启动输入字段填充15个字符后,单击屏幕上的某个位置。 我在这做错了什么?
$("#serialCode").change(function () {
var d = $("#serialCode").val();
if (d.length == 15) {
var $code = d.substring(0, 9);
alert('Serial code ' + $code);
}
$(this).val("");
});
答案 0 :(得分:2)
您可能希望使用keypress
而不是keyup或keydown,因为如果某人持有密钥,则不会为后续字符调用这些字符。
$("#serialCode").keypress(function () {
var d = $("#serialCode").val();
if (d.length == 15) {
var $code = d.substring(0, 9);
alert('Serial code ' + $code);
}
$(this).val("");
});
答案 1 :(得分:2)
我今天早些时候写了blog post为什么 onkeyup 对于检测用户输入不是一个好主意。更好的选择是使用 onkeydown 和0ms计时器,或者将新的HTML 5事件 oninput 组合用于符合标准的浏览器和 onpropertychange 在Internet Explorer中。
这两个事件将处理其他形式的输入,例如剪切,粘贴,撤消,重做,拖放,甚至是本机拼写检查所做的更改。
这样的事情对你有用:
// Check for which event we need to bind to, onpropertychange or oninput
var evt = "onpropertychange" in document.body ? "propertychange" : "input";
$("#serialCode").bind(evt, function (event) {
// For the onpropertychange event, check that the value property changed
if (evt == "propertychange" && event.propertyName != "value")
return;
var d = $("#serialCode").val();
if (d.length == 15) {
var $code = d.substring(0, 9);
alert('Serial code ' + $code);
}
$(this).val("");
});
请注意,如果您需要支持旧浏览器,则需要使用某种形式的事件检测来查看这些事件是否可用,如果没有,请使用计时器方法返回到keydown。
答案 2 :(得分:1)
在您失去对输入的关注之前,change
事件才会触发。
请尝试使用keyup
:
$("#serialCode").keyup(function () {
var d = this.value;
if (d.length == 15) {
var $code = d.substring(0, 9);
alert('Serial code ' + $code);
}
// this.value = '';
});
您应该注意,人们可以通过使用GUI将文本粘贴到输入中来解决这个问题,因此您可能也希望在change
上添加相同的功能。
$("#serialCode").bind('keyup keydown change', function () {
因为有多个事件,所以你应该在发送AJAX请求时设置某种标志,所以你不会多次发送它。
答案 3 :(得分:0)
我遇到了jQuery ajax界面的问题。当我决定只使用javascript时,这些问题就消失了。
请参阅IBM托管的此link。一旦你读完这篇文章,你将再也不会对ajax如何运作或应该如何运作提出疑问。