仅在document.ready上附加eventListener

时间:2014-04-06 03:24:43

标签: javascript jquery

有没有办法将事件附加到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请求。例如。

3 个答案:

答案 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
});

FIDDLE