防止在页面加载时多次调用jQuery函数

时间:2011-04-05 17:30:45

标签: jquery html plugins

我正在使用来自here的jQuery星级评级插件,效果很好,但在页面加载时会有一个被调用11次的函数!只有在提交评级时才会调用该函数,即单击一个星号。 我有什么办法可以阻止它在页面加载时被调用吗?

这是函数,它位于我的js文件中的$(document).ready中:

$(".auto-submit-star").rating({
        callback: function (value, link) {
            $.getJSON('/Handlers/RatingHandler.ashx?productId=' + pid + '&productScore=' + value, function (data) { postRatingUpdate(data); });
        }
    });

我不知道有多少javascript可以放心地插入插件的js文件中,所以我不确定幕后发生了什么。

这是获得评级明星的html:

<input class="auto-submit-star" type="radio" name="product-rating" value="1" />
<input class="auto-submit-star" type="radio" name="product-rating" value="2"/>
<input class="auto-submit-star" type="radio" name="product-rating" value="3"/>
<input class="auto-submit-star" type="radio" name="product-rating" value="4"/>
<input class="auto-submit-star" type="radio" name="product-rating" value="5"/>

更新 在尝试了一些提到的修复之后,我意识到评级方法没有被多次调用,但是它内部的回调是,并且由于这包含了我的getJSON调用,因此被多次调用。我认为需要多次回调才能将无线电按钮转换成星星。

解决方法是将getJSON调用移动到一个单独的函数中,并在插件的js文件中,将OnClick添加到星号后面的html中。

2 个答案:

答案 0 :(得分:1)

如果评级被称为onload。那么看起来评级是一种只应在点击无线电时调用的方法。

$(".auto-submit-star").change(function(){
$(this).rating({
    callback: function (value, link) {
        $.getJSON('/Handlers/RatingHandler.ashx?productId=' + pid + '&productScore=' + value, function (data) { postRatingUpdate(data); });
    }
});});

答案 1 :(得分:0)

var stopMe = false;
if(!stopMe) {
stopMe = true
$(".auto-submit-star").rating({
        callback: function (value, link) {
            $.getJSON('/Handlers/RatingHandler.ashx?productId=' + pid + '&productScore=' + value, function (data) { postRatingUpdate(data);});
        }
    });
}
相关问题