Javascript jqueryajax仅在某些键上执行
我制作了一个脚本,每当发生键控时,它都会将信息从输入发送到脚本。问题是,每当按下任何键时,它都会发送一个请求(显然)。这意味着某些请求(例如,当按下箭头键时)是免费完成的。有没有一种方法可以删除这些请求,或者它们是否发生并不重要Javascript jqueryajax仅在某些键上执行,javascript,jquery,ajax,Javascript,Jquery,Ajax,我制作了一个脚本,每当发生键控时,它都会将信息从输入发送到脚本。问题是,每当按下任何键时,它都会发送一个请求(显然)。这意味着某些请求(例如,当按下箭头键时)是免费完成的。有没有一种方法可以删除这些请求,或者它们是否发生并不重要 $('input[name="rusername"]').on("focus keyup", function() { // if ($(this).val() === '') $('#rusererr').html('Enter your desired u
$('input[name="rusername"]').on("focus keyup", function() {
// if ($(this).val() === '') $('#rusererr').html('Enter your desired username; between 8 and 32 characters');
var username = $(this).val();
$.post("register.php", {
rusername: username
}, function(stuff) {
//daca nu sunt erori
if (stuff==='1') alert(stuff);
else alert(stuff);
});
});
检查钥匙代码:
$('input[name="rusername"]').on("focus keyup", function(e) {
var keyCode = e.which;
if (keyCode != 13) {
//AJAX
} else {
return;
}
});
我以
13
为例,您必须查找要排除的键码。检查键码中的一些键
- 输入:13
- 上升:38
- 下降:40
- 右:39
- 左:37
- Esc:27
- 空格键:32
- Ctrl:17
- 备选:18
- 班次:16
- 你可以这样做
var exclude = [37, 38, 39, 40] // arrow keys, you can add more.
$('input[name="rusername"]').on("focus keyup", function(e) {
var keyCode = e.which || e.keyCode;
if (exclude.indexOf(keyCode) == -1) {
// do ajax here
} else { return; }
});
为什么要在每个关键操作上发送ajax请求 仅在输入的blur事件上发送ajax请求可以大大减少ajax调用的数量,并且不需要处理keycodes(keycodes是一个非常困难的主题!)。如果您必须这样做,请将结果保存在
localStorage
中,如果您执行了一些无意义的保存操作,则无所谓
$(“#输入”)。关于(“模糊”,函数(){
$(“#result”).html(“现在将触发Ajax调用!”);
});
$(“#输入”)。在(“键控”,函数()上{
$(“#result”).html(“以下字符串将在本地保存:“+this.value”);
});代码>
只需将post
调用包含在过滤所需键码的条件中,或者更好,在输入字段失去焦点后执行调用(这很可能是一个好迹象,表明用户实现了他们所需的结果)。与(这是针对keypress
而不是keyup
,不过,我不确定它们的规范化行为是否100%相同)出于性能原因,您绝对不应该在keyup事件上发送和ajax请求-而是使用更通用的事件。哪一个?我可以使用blur,但如果我要匹配两个密码字段,则在用户离开第二个字段之前它们不会匹配。我明白了。我想可能有一些功能会自动排除它。不…keyup
正是这样做的,在任何一个keyup:D上触发。您始终可以创建一个坏keycodes数组,并根据该数组检查当前keycode的索引。