我有一个由下拉列表更改调用的函数。该功能可能正在运行,用户可能会更改下拉列表。
如果发生这种情况,我希望正在运行的功能停止。
实施例
$('.txtCategory').change(function(){
ajaxPost('para', 'meters').stop(); //doesn't work
$('#Submit').attr('data-check', 'on');
$('#Submit').val('Stop Checking');
});
这可能吗?
提前致谢!
电贺, 吉
答案 0 :(得分:2)
这是不可能的,原因很简单:您的脚本只在一个线程上执行,一次只能运行一个函数。
在当前函数执行完毕之前,不会调用任何响应本地事件或查询的回调。
答案 1 :(得分:0)
@Guido
我想你想要其他一些东西..请更好地解释你的问题......我认为这不是你真正想要实现的......
您也可以使用这些
Create a setTimeOut function call and run it every 1000ms so whenever you want to
stop that setTimeOut function you can simple use clearTimeOut to stop it.
it will help you out. if you have still any issues let me know :)
答案 2 :(得分:0)
正如其他人所提到的那样,由于它们都是同步过程,因此无法停止/中止其他功能。另一方面,如果你想停止/中止AJAX(第一个A代表 Asynchronous )请求你可以在jQuery的AJAX返回对象的帮助下做到这一点。为此,您可以按照以下步骤操作;
首先创建一个全局变量来处理AJAX对象;
var xhr = null;
当您通过AJAX请求时,将返回对象分配给此变量;
xhr = $.ajax(
url: "http://someurl.org",
success: function() { ... }
);
现在,当您需要中止请求时,只需xhr.abort()
调用即可。
if (xhr != null)
xhr.abort();
希望有所帮助;
答案 3 :(得分:0)
正如其他人所说,在JavaScript中停止使用另一个函数是不可能的。
但是,您可以使用标志来检查Ajax请求是否正在运行。为此,jQuery具有未记录的$.active
属性。您可以按如下方式使用它:
$(".txtCategory").change(function() {
if ($.active > 0) // if there are more than 0 Ajax requests running
return false; // at a time we stop executing the current callback
ajaxPost("para", "meters");
$("#Submit").data("check", "on").val("Stop Checking");
});