2013-04-13 39 views
1

當插件/小部件需要使用自定義「事件」方法而不是標準jQuery事件時,我無法找出正確的語法。使用插件的自定義事件方法的語法

jQuery UI MultiSelect Widget不支持change方法,而是提供一個click事件,該事件在複選框被選中或未選中時觸發。我試圖使用窗口小部件的文檔中提供的語法來處理click事件,這樣我就可以替換幾個更改函數,包括下面顯示的那個函數,但是我很難找出正確的語法。爲click事件的結構是:

$("[name=Item]").on("multiselectclick", function (event, ui) {...}); 

我試過在大括號之間插入的功能,我也試着.on("multiselectclick", function() {...});沒有成功,所以我假設我需要在這裏插入一些:(event, ui)

我已經設法通過使用稍微不同的方法部分工作的功能$("[name=Item]").multiselect({ click: function (event, ui) {...},但我真的很想了解如何使用插件的自定義事件,以便我可以使功能正常工作。我用http://jsfiddle.net/chayacooper/cZRy9/5/這個非常簡單的例子發佈了一個小提琴,並且包含註釋以指示什麼不能正常工作。

一個地方我想與小部件的click事件替換change事件功能:

$("[name=Item]").change(function(){ 
    $("#Styles1, #Styles2").hide(); 
    $(".accordion").accordion("option", "active", false); 
    if($("[name=Item]").val() === "Dresses"){ 
     $("#Styles1").show(); 
     $(".accordion").accordion("option", "active", 0); 
     $('varItem').val('Dresses'); 
    } 
    else {...} 
}); 
+0

你有多個元素的同名='Item'? –

+0

使用'click:function()..'選項對象中的屬性與編寫單獨的外部'on'處理程序相同。如果您擁有正確的自定義事件名稱,代碼應該以相同的方式執行相同的操作在jsfiddle.net中創建一個演示,顯示問題 – charlietfl

+0

@MohammadAdil - 不,在本文檔中,每個select元素都有自己的名稱:-)如果只有一個元素在同一時間可見(使用'display:none') –

回答

1

何時dresses未被選中不隱藏Styles元素第一個問題很簡單。沒有什麼在代碼中選中該複選框的狀態,只值

修復有:

if ((ui.value) === "Dresses" && ui.checked) 

使用一個jQuery UI圖形化窗口小部件內的ui對象爲您的數據或狀態通常是最好的來源,而比使用jQuery選擇器來查找相同的東西。

我從來沒有使用這個插件,所以要弄清楚什麼是提供給我,我只是用console.log(ui)單擊處理程序中,所以我可以檢查ui對象,看看它裝的是什麼性質,並發現checked屬性添加以上if條件

如果你像jQueryUI的日期選擇一個更復雜的小部件一樣會看到ui屬性,其中一些也是方法的功能相當顯著數量

DEMO(使用自定義事件)

http://jsfiddle.net/cZRy9/2/

+0

我想我是在正確的道路上,當我用(ui.value)而不是元素的名字;-)這是否意味着我必須更改函數的每個部分的語法?如果是這樣,你能澄清我怎麼知道什麼/如何改變?你也知道是否有任何文檔/工具可以幫助我重寫這些功能? –

+0

你的代碼中的其他一切都應該工作......不知道你的意思是「重寫」 – charlietfl

+0

我只是嘗試了其餘的功能,你是對的:-)這是否意味着我唯一需要改變的是IF語句 - 使用'if((ui.value)===「Dresses」&& ui.checked)'而不是'if($(「[name = Item]」)。val()===「Dresses」) 「?出於好奇,這對於其他方法功能來說通常也是如此嗎? –