2009-10-12 50 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