2009-12-10 3 views
0

Ищите помощь, если это возможно.Рефактор Код JQuery в функцию для повторного использования

Я создал некоторый JQuery код, который делает работу, но я чувствую себя немного cluncky, и хотел бы, чтобы правильно реорганизовать его ...

На данный момент код реагирует на щелчок пользователя, он проверяет сервер, если пользователю разрешено голосовать, если это так, он обрабатывает голосование через ajax и соответственно проводит голосование.

Однако он в настоящее время настроен на запуск только при нажатии на ссылку «голос вверх», где он добавляет один к подсчету голосов. То, что я также хочу сделать, это отвлечь 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 ('voteUp')) { // Выполнять vote up action } else { // выполнение проголосовать вниз } return false; раздел. Большое спасибо – namtax

Смежные вопросы