0

我不太擅长 jquery。是否有可能放置一个变量运算符来使函数工作?因为在不同的页面上使用了不同版本的 jQuery。

.on功能出现在 1.7 中,但有些网站运行的版本较低,因此我需要使用.click功能。我想避免每个版本的重复代码。

例如 :

$('#mySelector')(var <= 3.4) ? ".click(function()" : ".on('click', function()");

{
    $( "#dialog p span" ).remove(); 
    $( "#dialog p" ).append('<span>'+ isEncHTML(html_output) 
});

谢谢大家的帮助。

为了更清楚:

这适用于 1.7(包括按钮 - 选项:

$('.delete_league, .print_league').on('click', function() 
{
        $( "#dialog p" ).append('<span>'+wpslm_v_script_vars.delete_league+'</span>');
            $( "#dialog" ).dialog({ 
                modal: true, 
                buttons: 
                [{
                    text: "OK",
                    click: function() 
                    { 
                        $( "#dialog p span" ).remove();
                        $(this).dialog("close"); 
                    }
                }] 
            });
});

这适用于 1.6。如果我保留按钮选项,则会引发错误。

    $('.delete_league, .print_league').click(function() 
{
    // Just in case there is an old message hanging around
    $( "#dialog p span" ).remove(); 
    $( "#dialog p" ).append('<span>'+ isEncHTML(wpslm_v_script_vars.delete_league) +'</span>');
    $( "#dialog" ).dialog({ 
        modal: true
    });
});

所以,我想制作选择器行(和按钮选项)变量,以便我可以对两者使用相同的代码。意思是,如果我看到我运行的是比 1.7 更旧的版本,我会使用不带按钮的 .click,否则我会使用带有按钮选项的 .on。我希望现在这不会太混乱。

4

3 回答 3

1

不是检查 jquery 版本,而是检查函数是否存在

if($.fn.on) {

}
于 2012-09-22T19:53:42.843 回答
1

我想避免每个版本的重复代码。

如果您想编写与 jQuery 2 版本兼容的代码,但又不想重复代码,那么您最好只针对您的代码支持的最低版本编写代码。

例如,如果最低为 1.6,则bind用于附加事件,delegate如果您需要将事件附加到动态生成的元素。
click无论如何在 1.6 中调用 bind 所以你不妨使用bind

就我个人而言,我认为编写一个方法来支持多个版本是一个坏主意,并且在某些情况下会难以维护并且难以调试。

但是,如果您针对特定版本的 jQuery 编写 2 个单独的代码文件,则可以只包含一个或另一个,具体取决于应用程序。

于 2012-09-22T19:44:23.763 回答
0

只需.click在这两种情况下使用。click在 jQuery 1.7 中有效

或者你可以做这样的事情

var setClick = function (selector,handler) {
      return $.fn.on ?
              function () {
                  $(selector).on('click',handler)
              } 
              : function () {
                   $(selector).click(handler);
              }
}

你可以像这样使用它

setClick("#mySelector",function () {
    $( "#dialog p span" ).remove(); 
    $( "#dialog p" ).append('<span>'+ isEncHTML(html_output) 
});

或者你可以将它添加到 jQuery 对象

$.fn.setClick = function (handler) {
      return this.on ?
              function () {
                  this.on('click',handler)
              } 
              : function () {
                   this.click(handler);
              }
}

然后像下面这样调用它

$("#mySelector").setClick(function () {
    $( "#dialog p span" ).remove(); 
    $( "#dialog p" ).append('<span>'+ isEncHTML(html_output) 
});

但是在所有情况下,您最终都一事无成,因为上述所有内容都可以通过首先使用 .click 轻松完成

于 2012-09-22T19:31:17.747 回答