将Jquery代码重构为函数以供重用

时间:2009-12-10 20:20:32

标签: jquery

尽可能寻求一些帮助。

我已经创建了一些jquery代码来完成这项工作,但我感觉有点笨拙,并且想要正确地重构它...

当代码响应用户的点击时,它会在服务器上检查是否允许用户投票,如果是,则通过ajax处理投票,并相应地移动投票。

但是,它目前设置为仅在单击“投票”链接时运行,其中它向投票计数添加一个。当用户点击带有class =“vote down”的链接时,我还想做的是从投票计数中减去1,但我不想再重复相同的代码,为此。

想知道是否还有将所有代码打包到一个函数中,并说“如果点击投票,请添加一个,如果点击投票,则减去一个。

非常感谢

<a href="link class="vote up"> Vote Up </a>
<a href="link class="vote down"> Vote Down</a>




        $('body#true .voteUp').click(function(){

        // Get the song meaning
        $thisLink = $(this);
        var idSm = $(this).parents("div:eq(1)").attr("id");
            //Validate that user isnt rating their own song meaning
            $.getJSON('http://localhost:8500/mxRestore/model/mdl_songs.cfc?method=getRateSm&returnFormat=json&queryformat=column', 
            {idSm: idSm}, 
            function(data){
                var bVoteAllowed = data.ROWCOUNT < 1;
                if(bVoteAllowed){
                // User can vote
                    $.getJSON('http://localhost:8500/mxRestore/model/mdl_songService.cfc?method=rateSm&returnFormat=json&queryformat=column', 
                    {idSm:idSm,action:true})
                                   // Change vote accordingly
                    var totalQuantity = 0;
                    var quantity = $thisLink.parent().parent().children('.rateValue').text();
                    quantity = parseInt(quantity);
                    totalQuantity = quantity + 1; 
                    $thisLink.parent().parent().children('.rateValue').text(String(totalQuantity)).effect("highlight", {}, 3000);
                }else {

                    $thisLink.text("you are not allowed to vote")   
                }

            })
            return false

    })

2 个答案:

答案 0 :(得分:0)

var vote = function(value) {
    // ...
};

$('body#true .voteUp').click(function() {
    return vote(+1);
});

$('body#true .voteDown').click(function() {
    return vote(-1);
});

...替换为您已定义的函数的主体。您可以使用传递给vote()的值来确定是应该投票还是投票。

答案 1 :(得分:0)

$('.voteUp, .voteDown').click(function(){
   //do your processing, vote checking etc


    if ($(this).hasClass('voteUp')){
       //perform vote up action
    }
    else{
        //perform vote down action
    }
   return false;
});