2014-10-07 101 views
0

我試圖做一個簡單的按鈕翻轉,改變它的圖標時,它的vclicked,但真的不明白爲什麼V單擊事件只發射一次,有人可以提供一些線索這光?如果我使用「單擊」或將事件直接附加到按鈕元素,我會得到相同的結果。jQuery Mobile的V單擊事件僅觸發一次

的jsfiddle在:提前http://jsfiddle.net/w7quoyn4/

$('#btnAddToCart').on('vclick', function() { 

    console.log("btnAddToCart vclick event fired"); 

    if ($(this).attr('data-icon', "plus")) { 
     $(this).attr('data-icon', "minus").button().button("refresh"); 
    } else { 
     $(this).attr('data-icon', "plus").button().button("refresh"); 
    } 

}); 

謝謝:)

+2

'如果($(本).attr( '數據圖標', 「加」))'沒有做什麼,你認爲它。 – 2014-10-07 11:27:09

+0

謝謝!我會盡快趕到事件發生:) – derelict 2014-10-07 11:39:07

+0

事件確實發生。不幸的是,我上面引用的條件語句總是返回「true」,所以在下一個事件中不會發生可見的變化。 – 2014-10-07 11:40:23

回答

1

有在代碼中的兩個問題。

首先,條件表達式$(this).attr('data-icon', "plus")調用設置器形式attr(),它將始終返回其被調用的jQuery對象。由於對象在布爾上下文中始終爲true,因此您的else分支將永遠不會被採用。

爲了解決這個問題,你可以調用的attr()吸氣形式和結果比較:

if ($(this).attr("data-icon") == "plus") { 
    // ... 
} 

話又說回來,到button()的調用是問題的心臟。使用適當的方法是buttonMarkup(),但自1.4版以來已棄用(並將在1.5版中刪除)。

實際的解決方案是增加和刪除相應類別自己,如:

$(document).on("vclick", "#btnAddToCart", function() { 
    console.log("btnAddToCart vclick event fired"); 
    $(this).toggleClass("ui-icon-plus ui-icon-minus"); 
}); 

你可以看到在this updated fiddle結果。

+1

好的,你打我完成答案。只建議'$ this.closest( '[數據-ID]')。ATTR( 「數據ID」)'作爲一個更便攜的替代:) – 2014-10-07 12:04:04

+0

@TrueBlueAussie,我在第一次同樣的想法,但如果' #btnAddToCart'元素還暴露了一個'data-id'屬性,那麼'最接近()'將會匹配它而不是它的祖父母,並且會發生混亂。 '父母()。方程(1)'是比'父短,但效率較低()。父()',所以我選擇離開的那部分代碼,因爲它是:) – 2014-10-07 12:07:41

+1

如何'$ this.parent( ).closest( '[數據-ID]')。ATTR( 「數據ID」)'?每當我看到分層依賴我開始擔心:) – 2014-10-07 12:11:16