2009-12-10 24 views
0

如果可能,請尋求幫助。將Jquery代碼重構爲重用函數

我已經創造了一些jQuery代碼,沒有工作,但我覺得有點cluncky,想正確地重構它...

在代碼由用戶響應點擊的那一刻,它會檢查服務器是否允許用戶投票,如果有的話,它會通過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 

    }) 
+0

'體#TRUE'是不必要的,可以慢下來。只需使用'#true'。更好的是,我會這樣寫'#tr​​ue a.voteUp' – 2009-12-10 20:37:04

+0

感謝您的建議......爲什麼這是一種改進的方法?謝謝 – namtax 2009-12-10 22:09:31

回答

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

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

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

與您已經定義。你可以使用傳遞給vote()值,以確定是否應該或向下投了函數體替換...

+0

嗨,謝謝你的幫助。然而,代碼似乎有點問題。它似乎並沒有在投票函數中識別「idSm」變量,只要我叫它。它說變量是未定義的...你知道爲什麼嗎?由於 – namtax 2009-12-10 21:15:37

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; 
}); 
+0

那裏嗨,你可以與關於這段代碼更明確,因爲它似乎我仍然會在if($(本).hasClass(「voteUp」)){// 執行重蹈大chunck的代碼投票後續行動 } 其他{// 執行不合理動作 } 返回false; 部分。 非常感謝 – namtax 2009-12-15 20:05:58