2010-04-19 79 views
2

我不確定是什麼原因造成這種情況,但我使用cluetip並將其綁定到一個活動事件(單擊或鼠標輸入),但在每種情況下,cluetip isn'直到一次點擊或懸停事件發生。我正在使用ajax加載內容的實時事件,但我也遇到了非Ajax加載內容的問題。我不知道爲什麼會發生這種情況 - 任何人都可以看到我可能會出錯的地方嗎?非常感謝。jQuery Cluetip沒有激活,直到懸停或點擊事件後

$("a.jTip").live("click", function(){ 
      $('a.jTip').cluetip({ 
       attribute: 'href', 
       cluetipClass: 'jtip', 
       arrows: true, 
       activation: 'click', 
       ajaxCache: false, 
       dropShadow: true, 
       sticky: true, 
       mouseOutClose: false, 
       closePosition: 'title' 
      }) 
      return false; 
     }); 

回答

2

那是因爲你沒有設置它,直到第一個事件發生。換句話說,您正在處理事件(顯然),並且您在處理程序中設置了設施。該特定事件不會觸發提示代碼。不要這樣做,你可能會考慮要麼確保動態添加內容的代碼總是直接調用「cluetip」設置,要麼調查「LiveQuery」插件在DOM更改時執行「自動」工作。就個人而言,我會採用前一種方法,但很多人顯然使用LiveQuery的結果很好。

+0

我已經走了你的第一個建議,這工作正常,它只是意味着直接調用cluetip的一點點重複,但我想我寧願這樣做比加載一個額外的插件。謝謝你的幫助! – kenny99 2010-04-19 14:31:35

0

您正在綁定關於click事件的線索。這就是它在剪輯之後綁定到線索的原因。從發佈的代碼中刪除點擊,它應該工作正常。

1

因爲cluetip沒有初始化,直到第一次點擊。

嘗試:

$("a.jTip").live("mousedown", function(event){ 
     $('a.jTip').cluetip({ 
      attribute: 'href', 
      cluetipClass: 'jtip', 
      arrows: true, 
      activation: 'click', 
      ajaxCache: false, 
      dropShadow: true, 
      sticky: true, 
      mouseOutClose: false, 
      closePosition: 'title' 
     }) 

     event.preventDefault(); 
    }); 

雖然cluetip將被初始化多次,所以怎麼樣:

$("a.jTip").live("mousedown", function(event){ 
     var self = $(this); 

     if (!self.data('cluetip-initd')) { 
      self.cluetip({ 
       attribute: 'href', 
       cluetipClass: 'jtip', 
       arrows: true, 
       activation: 'click', 
       ajaxCache: false, 
       dropShadow: true, 
       sticky: true, 
       mouseOutClose: false, 
       closePosition: 'title' 
      }).data('cluetip-initd', true); 
     }; 

     event.preventDefault(); 
    }); 
+0

是的,「初始化多次」部分可能是一個問題。 – Pointy 2010-04-19 14:18:31

0

cluetip函數修改的元素給它提示的行爲。您的代碼僅在用戶單擊該元素時執行該修改。您希望在元素爲加載時發生,而不是在點擊時發生。

您似乎覺得cluetip函數實際上會彈出工具提示,因此您需要將其包含在元素的click處理程序中。事實並非如此。函數設置該元素爲工具提示,並且它負責處理click/mouseover本身。

2

你仍然可以使用livequery() plugin對於這一點,這是它會是什麼樣子:

$('a.jTip').livequery(function() { 
    $(this).cluetip({ 
    attribute: 'href', 
    cluetipClass: 'jtip', 
    arrows: true, 
    activation: 'click', 
    ajaxCache: false, 
    dropShadow: true, 
    sticky: true, 
    mouseOutClose: false, 
    closePosition: 'title' 
    }); 
}); 

.live()沒有完全取代.livequery(),它的行爲方式不同。如果您仍然希望查找與選擇器.livequery()匹配的當前和新元素,或者將綁定作爲ajax回調的一部分(例如,您的成功例如$('a.jTip', data))是最佳路線。

相關問題