javascript - 使用onkeyup javascript时如何再次停止和启动ajax提交表单?
问题描述
我试图在新keyup
事件触发时停止先前的 AJAX 请求。模式是这样的:
- 用户输入,我的
A
代码将使用 AJAX 提交表单test_value
。A
- 当用户进入时
B
,我想从第一步停止 AJAX 请求并使用test_value
of发出新请求AB
。
<input type="text" id="xxx" onkeyup="test_fn(this.value)" autocomplete="off">
<div id="loading" style="display: none;">please wait.....</div>
<span id="myplace_test"></span>
<form id="test_fid" method="POST" action="" style="display: none;">
<input type="text" name="test_value" id="test_value">
</form>
function test_fn(val) {
document.getElementById("loading").style.display = "block";
document.getElementById("test_value").value = val;
$.ajax({
url: "test.php",
type: "POST",
data: $('#test_fid').serialize(),
cache: false,
success: function(data) {
$('#myplace_test').html(data);
document.getElementById("loading").style.display = "none";
}
});
}
解决方案
为了达到您的要求,您可以在变量中保存对先前 AJAX 请求的引用,然后abort()
在新keyup
事件触发时调用它。
另请注意,您不应该使用on*
事件属性。由于您在页面中包含了 jQuery,因此您可以使用它来附加不显眼的事件处理程序。您还可以使用 jQuery 来选择您的元素并更简洁地使用它们。尝试这个:
<input type="text" id="xxx" autocomplete="off">
<div id="loading">please wait.....</div>
<span id="myplace_test"></span>
<form id="test_fid" method="POST" action="">
<input type="text" name="test_value" id="test_value">
</form>
var activeRequest;
$('#xxx').on('keyup', function(e) {
$("l#oading").show()
$("#test_value").val(this.value);
activeRequest && activeRequest.abort();
activeRequest = $.ajax({
url: "test.php",
type: "POST",
data: $('#test_fid').serialize(),
cache: false,
success: function(data) {
$('#myplace_test').html(data);
$("#loading").hide();
}
});
});
#loading,
#test_fid {
display: none;
}
还要注意使用 CSS 来包含样式规则,而不是将它们内联在 HTML 中。
推荐阅读
- c# - 通过 LINQ 语句和计算将记录添加到结果集中
- r - 如何从 R 中的另一个数据框中添加新列,对应于第一个数据框中的特定样本
- flutter - Flutter:找到了这个候选人,但参数不匹配
- select - 插入选择 - 存储过程影响 0 行
- javascript - 获取 HTML 表格标签之间的所有文本(单行和多行)
并生成json 我有下面的 HTML 表,我想获取标签之间的数据,这些数据有时是单行的,有时是多行的。
<table> <tbody> <tr> <th>Role</th> <th>De
- git - Git repo 可以充当另一个 Git repo 的子/继承吗?
- python - 如何在不使用 max() 的情况下使函数最有效?
- ruby-on-rails - 如何解冻哈希?
- mysql - 您如何将输出参数从 vb.net 传递和接收到 mysql
- ansible - 在 Ansible Tower 使用的项目中将自定义模块单元测试存储在哪里?