Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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
Jquery 有没有一种方法可以将命令绑定到fadeIn事件而不必.trigger(';fadeIn';)呢?_Jquery_Events_Bind - Fatal编程技术网

Jquery 有没有一种方法可以将命令绑定到fadeIn事件而不必.trigger(';fadeIn';)呢?

Jquery 有没有一种方法可以将命令绑定到fadeIn事件而不必.trigger(';fadeIn';)呢?,jquery,events,bind,Jquery,Events,Bind,我有一个交互式表单系统,它有不同的模块,每个模块的表单包含在不同的div元素中。当我从一个模块切换到另一个模块时,我经常这样做: $('#module_1').hide(); $('#module_2').fadeIn(); 我喜欢这样,但是现在,在开发这个系统一段时间之后,我有了一些功能(比如重新初始化jqgrid),我希望在每次出现fadeIn时都能实现这些功能。我是这样设置的: $('#module_2').bind('fadeIn',function(){ initialize

我有一个交互式表单系统,它有不同的模块,每个模块的表单包含在不同的div元素中。当我从一个模块切换到另一个模块时,我经常这样做:

$('#module_1').hide();
$('#module_2').fadeIn();
我喜欢这样,但是现在,在开发这个系统一段时间之后,我有了一些功能(比如重新初始化jqgrid),我希望在每次出现
fadeIn
时都能实现这些功能。我是这样设置的:

$('#module_2').bind('fadeIn',function(){
    initialize_jqgrid();
});
有没有一种方法可以使这项工作适用于
$('#module_2').fadeIn()的所有实例而不必转到每个实例并用此替换它

$('#module_2').fadeIn().trigger('fadeIn');
这背后的动机就是要有更干净的代码,
$('#module_2').fadeIn().trigger('fadeIn')有点多余

非常感谢

当然

var _old = $.fn.fadeIn;

$.fn.fadeIn = function(){
    var self = this;
    return _old.apply(this,arguments).promise().done(function(){
        self.trigger("fadeIn");
    });
};

// and your code: // replace .bind with .on if jQuery 1.7+
​$("div").bind("fadeIn",function(){alert("worky");});

$("div").fadeIn(2000);​​​​​​​​​​​​​​​​​
演示

更新以供评论

var _old = $.fn.fadeIn;

$.fn.fadeIn = function(){
    return _old.apply(this,arguments).trigger("fadeIn");
};

// and your code: // replace .bind with .on if jQuery 1.7+
​$("div").bind("fadeIn",function(){alert("worky");});

$("div").fadeIn(2000);​​​​​​​​​​​​​​​​​
简单功能:

switch_module('div#module_1','div#module_2');


function switch_module(old_selector, new_selector){
    $(old_selector).hide();
    initialize_jqgrid();
    $(new_selector).fadeIn();
}

您可以定义回调函数并将其用作fadeIn()的参数


您可以使用回调函数
$('div#module_2').fadeIn(500,initialize_jqgrid)

并将所有内容放入带有通用选择器调用的函数中

function fadeModule(selector)
{
    $(selector).fadeIn(500, initialize_jqgrid);
}
并这样称呼它
fadeModule('div#module_2')


EDIT:500是fadeIn的默认持续时间,可以随意放置。

在代码中,
initialize\u jqGrid()。移除
()
@jeffery#u the_wind——请将
div#module_1
替换为
#module_1
,它是一个更快的选择器。~是的,在我的代码中,使用选择器只是引用ID,
div#module_1
只是一个例子。不过,我没有意识到没有
div会更快,谢谢!我检查了一下,确保你的函数在每次
fadeIn
调用中都能正常工作,即使是在不同的div上,它也能正常工作!请参见此处:。非常感谢!还有一个问题,在您的代码中,
…promise()。完成(func…
这是否会使触发器在
fadeIn
完成后触发?如果我希望触发器在
fadeIn
开始时触发该怎么办?是的,它会一直等到它完成。如果您希望它在开始时运行,请在.apply行之后或之前运行触发器方法。apply行并删除。promiseGreat,谢谢,我试过了,但我更喜欢你的第一种方法!
function fadeModule(selector)
{
    $(selector).fadeIn(500, initialize_jqgrid);
}