2009-10-12 145 views
1

我使用這個插件:http://www.fyneworks.com/jquery/star-rating/如何在回調函數中添加點擊函數?

是否有可能把一個點擊功能這樣的回調函數裏面?

$('.auto-submit-star').rating({ 
    callback: function(value, link){ 
    $('.myclass').click(function(){ 
     alert($(this).attr('id')); 
    }); 
    alert($(this).attr('id')); 
    } 
}); 

一旦添加點擊功能,回調函數將停止工作。我需要這樣做,因爲如果用戶點擊任何明星,我可以拿起明星的ID,但如果用戶點擊取消按鈕,我不能以某種方式拿起取消的ID。

假設你可以在回調中使用點擊函數,它會不會觸發它?因爲在你點擊它之後,它會觸發回調,它是否會觸發我的點擊功能?

如果我保持點擊功能,單獨的東西仍然可以工作,但是我不得不在兩個函數中重複一堆代碼。

+0

簡短的回答是,這是可能的。以下兩種解決方案利用「實時」事件處理函數是更適合jQuery 1.3.x + – 2009-10-12 17:49:19

回答

2

要防止點擊時發生的多個動作,你需要添加一個新的(否則他們只會堆疊在彼此的頂部)之前消滅前面的事件。爲了破壞(即殺死)的事件,您需要:

$('.auto-submit-star').rating({ 
    callback: function(value, link){ 
    $(".myclass").die("click").live("click", function(){ 
     alert($(this).attr('id')); 
    }); 
    } 
}); 

或者(最好),不從回調中附加的click事件...單獨做到這一點。

$(".myclass").live("click", function(){ 
    alert($(this).attr('id')); 
}); 
$('.auto-submit-star').rating() 

祝您的項目順利。

+0

謝謝,這非常有幫助。我將click放置在回調函數中的原因是在獲取id之後,我將基本上在每個函數內重複相同的代碼,所以我試圖減少重複的代碼。 – Roger 2009-10-12 18:57:25

+0

嗯,實際上有點奇怪的是,放在實時點擊功能之外的代碼是在實時點擊功能的代碼之前處理的。這是爲什麼? – Roger 2009-10-12 19:31:12

+0

@Roger:我認爲你對'live()'方法的作用感到困惑。基本上,我給出的第二個代碼示例的前三行是(1)找到具有類「myclass」的所有元素,並使其每當單擊其中一個元素時,都會彈出一個警報框,其中包含點擊元素。每當具有類「myclass」的另一個元素被添加到DOM時,它就重複相同的過程。所以,實質上,作爲一個用戶,直到你點擊一個匹配的元素,你纔會知道已經處理了'live()'方法。這有幫助嗎? – KyleFarris 2009-10-12 20:45:25

2

嘗試使用實時處理

$(".myclass").live("click", function(){ 
    alert($(this).attr('id')); 
}); 
+0

的解決方案。但是,有時我會在出現問題後出於某種原因收到多個提醒,即使只是一次點擊而已。任何想法爲什麼會發生? – Roger 2009-10-12 18:10:04