Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery添加事件并立即执行它_Javascript_Jquery_Events_Triggers - Fatal编程技术网

Javascript jQuery添加事件并立即执行它

Javascript jQuery添加事件并立即执行它,javascript,jquery,events,triggers,Javascript,Jquery,Events,Triggers,通常情况下,我需要添加一些带有自定义设置的事件,然后在PageReady上应用这些自定义设置 通常我是这样做的: $(window).resize(function(){ //some code }).resize(); //trigger it when event defined 这个解决方案的问题是,如果我有许多调整大小的事件,那么如果我像这样触发它-它也将重新执行所有以前定义的事件 因此,另一个解决方案可能是: var m

通常情况下,我需要添加一些带有自定义设置的事件,然后在PageReady上应用这些自定义设置

通常我是这样做的:

        $(window).resize(function(){
            //some code
        }).resize(); //trigger it when event defined
这个解决方案的问题是,如果我有许多调整大小的事件,那么如果我像这样触发它-它也将重新执行所有以前定义的事件

因此,另一个解决方案可能是:

    var myCallback = function(){ /*some code*/ };
    $(window).resize(function(){
        myCallback();
    });
    myCallback();
它做得很正确,但我发现它的代码不太好看,而且没有将这个内部函数更改为事件目标DOM元素,这是非常有用的

太好了,大概是这样

$(window).addEventAndFireOnce("resize", function(){});

这样的函数并不难实现,但我想知道在js或jQuery中是否已经有类似的功能。

我会这样写:

var myCallback = function(){ /*some code*/ };
$(window).resize( myCallback );
myCallback();

我想这样写:

var myCallback = function(){ /*some code*/ };
$(window).resize( myCallback );
myCallback();

我不知道是否只有我一个人在这方面,但如果我需要这样做,而且这并不少见,我可能会在绑定真实事件单击或更改或其他内容的同时绑定自定义事件名称和范围:

var myCallback = function(ev) { ... };

$(window).on("resize my-resize", myCallback).trigger("my-resize");

这在处理复选框上的单击事件时特别有用。触发单击实际上会更新复选框选中状态,这通常不是您想要做的。这里有jQuery.triggerHandler方法,但不管出于什么原因,它只对jQuery对象中的第一个元素有效,因此不能通过一次调用触发表单中所有复选框的处理程序。

我不知道是否只有我一个人在这方面,但是,如果我需要这样做,而且这并不少见,我可能会在绑定真实事件单击或更改或其他内容的同时绑定自定义事件名称和范围:

var myCallback = function(ev) { ... };

$(window).on("resize my-resize", myCallback).trigger("my-resize");

这在处理复选框上的单击事件时特别有用。触发单击实际上会更新复选框选中状态,这通常不是您想要做的。这里有jQuery.triggerHandler方法,但由于某种原因,它只对jQuery对象中的第一个元素起作用,因此不能通过一次调用触发表单中所有复选框的处理程序。

我认为您在这里寻找的是命名空间处理程序

var log=函数{ var$log=$'log'; 返回函数msg{ $'

'{ 文本:msg }.appendTo$log } }; $window.resizefunction{ 日志“处理程序1”; }; $window.resizefunction{ 日志“处理程序2”; }; $window.on'resize.myspecial',函数{ 日志“处理程序3”; }.trigger'resize.myspecial';


我认为您在这里寻找的是名称空间的处理程序

var log=函数{ var$log=$'log'; 返回函数msg{ $'

'{ 文本:msg }.appendTo$log } }; $window.resizefunction{ 日志“处理程序1”; }; $window.resizefunction{ 日志“处理程序2”; }; $window.on'resize.myspecial',函数{ 日志“处理程序3”; }.trigger'resize.myspecial';


您可以在jQuery中使用trigger,您可以在jQuery中始终使用trigger来编写函数。@不可见:这与OP在第一个代码块后描述的问题相同。在窗口调整大小的情况下,我总是使用一些超时,以适当地延迟几毫秒……您可以在jQuery中始终使用trigger来编写您的函数函数。@theinvisible:这与OP在其第一个代码块后描述的问题相同。在窗口调整大小的情况下,我总是使用一些超时-适当地延迟几毫秒…@Pointy:它将处于松散模式,默认情况下这是…全局对象,它是浏览器上的窗口对象。但通常人们并不关心附加到窗口的处理程序中的这一点。@t.J.Crowder是的,对于这个特定的示例是正确的,我想对于窗口处理程序更一般。@Pointy:它将处于松散模式,默认情况下这是…全局对象,它是浏览器上的窗口对象。但通常人们并不关心附加到窗口的处理程序中的这一点。@t.J.Crowder是的,对于这个特定的示例是这样的,我想对于窗口处理程序来说更一般。或者使用一个名称空间:$window.onresize.foo,function{}.triggerresize.foo;在init上更新状态正是我所需要的。这是一个很好的解决方案。我在想你一直在创建新的事件名称是多么有创意:如果有$window.onevent,callback,true之类的东西就好了;其中,true表示在添加事件时触发回调。@T.J.Crowder yes-再次,我养成了使用自定义事件与真实事件配对的习惯,以避免交互元素上事件的烦人问题。或者使用命名空间:$window.onresize.foo,function{}.triggerresize.foo;在init上更新状态正是我所需要的。这是一个很好的解决方案。我在想你一直在创建新的事件名称是多么有创意:如果有$window.onevent,callback,true之类的东西就好了;其中,true表示在添加事件时会触发回调。@T.J.Crowder yes-再次,我养成了使用自定义事件与真实事件配对的习惯,以避免交互元素上的事件出现恼人的问题。我在这里看到的唯一问题是
请记住,我在添加相同类型的新事件时一直在“发明”新名称空间-当您有许多调整大小的事件时,这不是很舒服。@AdamPietrasiak只为特定事件添加名称空间。我不确定我是否理解您的评论,假设您还有5个调整大小事件,您希望以与resize.myspecial相同的方式触发它们。您需要添加另一个名称空间,如resize.myspecial-2 resize.myspecial-3等。如果您不这样做,您将得到一大组resize.myspecial事件,并且基本上与原始事件处于相同的情况。@AdamPietrasiak您可以对任意多的事件使用相同的名称空间,同样,我在这里并没有看到问题。关于Pointy的答案,在某些情况下使用自定义事件可能更合适,不确定您的情况我在这里看到的唯一问题是,在添加相同类型的新事件时,始终需要“发明”新名称空间-当您有许多调整大小的事件时,这不是很舒服。@AdamPietrasiak只需为特定事件添加名称空间即可。我不确定我是否理解您的评论,假设您还有5个调整大小事件,您希望以与resize.myspecial相同的方式触发它们。您需要添加另一个名称空间,如resize.myspecial-2 resize.myspecial-3等。如果您不这样做,您将得到一大组resize.myspecial事件,并且基本上与原始事件处于相同的情况。@AdamPietrasiak您可以对任意多的事件使用相同的名称空间,同样,我在这里并没有看到问题。现在,关于Pointy的答案,在某些情况下使用自定义事件可能更合适,但不确定您的情况