jQuery - 创建一个jQuery函数

Mik*_*ike 1 jquery function

对于总标题我很抱歉,但我真的不知道怎么称呼它.

这是我的代码,我想减少:

    $('.ShowDialogIcon').click(function() {
        $('.show_dialog').slideDown('fast');
        return false;
    });

    $('.ShowDialogIcon2').click(function() {
        $('.show_dialog2').slideDown('fast');
        return false;
    });

    $('.ShowDialogIcon3').click(function() {
        $('.show_dialog3').slideDown('fast');
        return false;
    });

    $('.ShowDialogIcon4').click(function() {
        $('.show_dialog4').slideDown('fast');
        return false;
    });
Run Code Online (Sandbox Code Playgroud)

现在我看,这有点不完整,我想做的是:

$('.ShowDialogIcon').showDialog('.showDialog');
$('.ShowDialogIcon2').showDialog('.showDialog2');
$('.ShowDialogIcon4').showDialog('.showDialog3');
$('.ShowDialogIcon4').showDialog('.showDialog4');
Run Code Online (Sandbox Code Playgroud)

我想出的是:

jQuery.fn.showDialog = function(cls) {
    $(this).click(function() {
        $(cls).show('fast');
    });
}
Run Code Online (Sandbox Code Playgroud)

它不起作用,任何人都可以帮忙吗?

谢谢,迈克.

Rob*_*nik 5

您在错误的元素上设置click事件.

正确的jQuery插件

这相当于您的功能:

jQuery.fn.extend({
    showDialog: function(cls) {
        this.click(function(evt){
            evt.preventDefault();
            $(cls).slideDown("fast");
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

要停止事件冒泡,最好preventDefault在事件本身上使用函数而不是返回false.这样您就可以安全地避免浏览器的特殊性.

  • @Mike见Stephen的评论. (2认同)