有没有办法将事件附加到document.ready?例如,看看这段代码
$(document).ready(function(){
$('body').load('eg_pageload.html');
$(document).ajaxStart(function(){
console.log('say something to the console');
});
$('#trigger').on('click', function(){
$('body').load('file.txt');
});
});
因此,当用户点击#trigger
时,ajaxStart未激活。换句话说,ajaxStart只应在页面加载时启动另一个ajax请求时触发,否则不启动ajaxRequest。我试图在ajaxComplete函数上取消绑定ajaxRequest,但它不起作用,因为我网站上的某些页面在页面加载时没有调用任何ajax请求,而是在单击事件上调用ajax请求。例如。
答案 0 :(得分:0)
如何使用 unbind :
(文档)$。就绪(函数(){ $( '主体')的负载( 'eg_pageload.html');
$(document).ajaxStart(function(){
console.log('say something to the console');
});
$('#trigger').on('click', function(){
$('body').unbind("ready"); // Add this line
$('body').load('file.txt');
});
});
答案 1 :(得分:0)
如果我理解正确,您希望在特定的AjaxStart
来电中禁用Ajax
触发器。这通常是这样完成的:
$.ajax({
url: "test.html",
global: false,
...
});
请注意global: false,
行。这正是它的用途。
来自AjaxStart Docs
附加说明:
如果在全局选项设置为的情况下调用$ .ajax()或$ .ajaxSetup() false,.ajaxStart()方法不会触发。
来自Ajax Docs
global(default:true)类型:Boolean是否触发全局Ajax 此请求的事件处理程序。默认值为true。设为false为 防止像ajaxStart或ajaxStop这样的全局处理程序 触发。这可用于控制各种Ajax事件。
您正在使用.load()
方法,因此该选项不可用。它不适用于类似的.get()
方法,但它们都是简写的Ajax函数,因此您可以像这样使用Ajax
。
$(document).ready(function()
$(document).ajaxStart(function(){
console.log('say something to the console');
});
$('#trigger').on('click', function(){
$.ajax({
url: 'file.txt',
global: false,
dataType: 'html'
});
.done(function( html ) {
$( 'body' ).append( html );
});
});
});
这将是避免该请求AjaxStart
的唯一方法,而DOM
加载位置无关紧要。
以上Jquery
就是一个例子,因此它们可能是一些小错误,但所提供的链接将完全涵盖整个过程。
答案 2 :(得分:0)
为什么不使用on()
和off()
,它只是一个事件?
内部jQuery执行$(document).on('ajaxStart', fn)
,因此您可以使用off()
将其删除,这意味着您可以在ready
的回调顶部绑定事件,然后将其解除绑定结束回调,它不会被后来事件触发的ajax调用
$(document).ready(function(){
$(document).on('ajaxStart', ajaxFN); // place at start
function ajaxFN(){
console.log('say something to the console');
}
$('body').load('eg_pageload.html'); // this will trigger ajaxStart
$('#trigger').on('click', function(){
$('body').load('file.txt'); // this will NOT
});
$(document).off('ajaxStart', ajaxFN); // place at end
});