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

'body # true'은 불필요하며 작업 속도가 느려질 수 있습니다. 그냥'# true '를 사용하십시오. 더 좋은 점은, 나는이 방법으로'#true a.voteUp'라고 쓰고 싶습니다. –

+0

당신의 제안에 감사드립니다 ... 왜 이것이 개선 된 방법입니까? 감사합니다 – namtax

답변

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

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 ($ (this) .hasClass ('vote)') { // perform 투표 최대 작업 } else { // 투표 다운 액션 수행 } return false; 섹션. 많은 감사 – namtax

관련 문제