2012-09-22 112 views
0

我並不擅長jquery。 是否有可能讓變量操作符使某個功能起作用?由於在不同頁面上使用了不同版本的jQuery。jquery中的變量函數

。對功能全想出了在1.7,但一些網站用低版本上運行,因此我需要使用。點擊函數。我想避免每個版本的重複代碼。

例如:

$('#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與按鈕選項。 我希望現在不要太混淆。

+0

你決定應該只是基於一個簡單的問題:'什麼是最低的版本,我必須支持'這個問題的答案決定了jQuery庫你最終使用。以我個人的觀點來看,如果你還想使用後來的jQuery版本編寫代碼,而不是編寫單獨的代碼頁,那麼它就是'lazy-coding',並且最終會花費更多的時間來進行調試,而不是花時間編寫和維護單獨的代碼頁。就個人而言,我會嘗試通過簡單地編寫最低的jQuery庫來節省時間。 – Nope

回答

0

只是在兩種情況下都使用.clickclick是有效的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) 
}); 

,但你最終完成任何操作,因爲上述所有可能已wimply在首位

+0

感謝您的回答。我知道。但.click不支持ui-framework中的按鈕選項。我想用這個:$( 「#dialog」).dialog({ \t \t \t \t \t模式:真, \t \t \t \t \t按鈕: \t \t \t \t \t [{ \t \t \t \t \t \t text:「OK」, \t \t \t \t \t \t點擊:()函數 \t \t \t \t \t \t { \t \t \t \t \t \t \t $( 「#dialog p跨度」)一個.remove(); \t \t \t \t \t \t \t $(this).dialog(「close」); \t \t \t \t \t \t} \t \t \t \t \t}] \t \t \t \t}); – JSS

+1

@JSS:您能否對此有更具體的瞭解?你究竟想要做什麼? –

+0

@ Felix:我想要根據變量選擇是使用.on還是.click函數。但是在選擇器的第一行是onli。 – JSS

1

我想避免每個版本重複的代碼使用。點擊完成所有案件。

如果你想編寫與2版本jQuery兼容的代碼,但你不想複製代碼,你最好只寫代碼來針對你的代碼支持的最低版本。

例如,如果最低值爲1.6,則使用bind附加事件,如果需要將事件附加到動態生成的元素,則使用delegate
click調用綁定無論如何在1。6所以你不妨使用bind

就個人而言,我相信編寫一個單一的方法來支持多個版本是一個壞主意,將很難維護和瘋狂調試的場合。

但是,如果您編寫2個單獨的代碼文件,針對特定版本的jQuery,則可以僅包含一個或另一個,具體取決於應用程序。

+0

感謝您的回答。是的,我可以輕鬆地做到這一點。但後來我必須保持2個文件。如果可能的話,我想避免這種情況。 – JSS

+0

@JSS:這就是爲什麼我會簡單地編寫針對您必須支持的最低jQuery庫的代碼,這樣您就不必維護單獨的代碼文件或在任何地方破解代碼。 – Nope

1

不是檢查jQuery的版本,請確認該功能存在

if($.fn.on) { 

} 
+0

好的,但是這不會阻止我使用if-then-else來選擇函數。 – JSS