2012-03-17 4 views
0

Я работаю над небольшим плагином Wordpress «Оцените мое все». Этот плагин хорошо работает на отдельных сообщениях, но на странице блога, когда есть несколько сообщений, которые плагин не может видеть, с какого почтового идентификатора клик был сделан. Он всегда принимает значение столбца страницы.Как получить динамический идентификатор сообщения или значение в сценарии jquery

Я добавил идентификатор сообщения id и имена классов для решения проблемы (e g: post_id $ post-> ID), но теперь я заблокировал редактирование файла jquery таким образом.

РНР код элемента после голосования:

<input type=\"hidden\" id=\"post_id$post->ID\" value=\"" . $post->ID . "\" /> 
    <div class=\"vote\"> 
<table> 
    <tr><td> 
    <a class=\"vote_up\" href=\"#\"></a></td> 
<td> 
    <a class=\"vote_down\" href=\"#\"></a></td></tr> 
    <tr> 
<td class=\"up_perc$post->ID\">" . get_percentage(1, $post->ID) ."%</td> 
<td class=\"down_perc$post->ID\">" . get_percentage(2, $post->ID) . "% </td> 
</tr> 
    </table></div> 

<div class=\"vote_succ$post->ID\"></div> 

Кодекса Jquery (для голосования вверх, голосовать вниз довольно же):

jQuery(document).ready(function($) { 


     $(".vote_up").click(function(e) { 
     e.preventDefault(); 

     $.post('/wp-content/plugins/rate-my-whatever/rate.php', {vote_type: "1", post_id: $("#post_id1").val()}, function(data) { 

      $(".vote_succ1").html(data); 
      $.post('/wp-content/plugins/rate-my-whatever/rate.php', {action: "getPercentage", vote_type: "1", post_id: $("#post_id1").val()}, function(data2) { 
       $(".up_perc1").html(data2); 
      }); 
      $.post('/wp-content/plugins/rate-my-whatever/rate.php', {action: "getPercentage", vote_type: "2", post_id: $("#post_id1").val()}, function(data3) { 
       $(".down_perc1").html(data3); 
      }); 
     }); 
    }); 

Я поставил статически "1" после того, как некоторые элементы id и class, чтобы проверить, как моя проблема будет решена, она отлично работает с Post 1, идентификатор и значение «1», теперь мне нужно заменить «1» в конце #post_id, .vote_succ, .up_perc , .down_perc с помощью динамического кода, чтобы он работал с динамическими элементами, сгенерированными кодом php.

Благодарим за помощь.

ответ

2

Вам необходимо изменить код, чтобы он работал на устройстве, на которое было нажато, а не на всех объектах этого класса на всей странице. Самый простой способ сделать это, чтобы поместить каждый блок в контейнере DIV, как это и использовать только имена классов, нет ID значения:

<div class=\"voteUnit\"> 
    <input type=\"hidden\" class=\"post_id\" value=\"" . $post->ID . "\" /> 
    <div class=\"vote\"> 
    <table> 
     <tr> 
      <td><a class=\"vote_up\" href=\"#\"></a></td> 
      <td><a class=\"vote_down\" href=\"#\"></a></td> 
     </tr> 
     <tr> 
      <td class=\"up_perc\">" . get_percentage(1, $post->ID) ."%</td> 
      <td class=\"down_perc\">" . get_percentage(2, $post->ID) . "% </td> 
     </tr> 
    </table> 
    </div> 

    <div class=\"vote_succ\"></div> 
</div> 

И затем изменить код, чтобы найти соответствующий объект в том же блоке голосования на который было нажато, используя $(this).closest('.voteUnit').find(), чтобы найти объект в блоке голосования, на котором вы нажмете, вместо того, чтобы искать на всей веб-странице и находить объекты во всех единицах голосования. .closest('.voteUnit') ищет цепочку предков из пункта, на который он нажал, пока не найдет родителя с class=voteUnit. Затем код может использовать это в качестве поддерева для поиска других объектов в блоке голосования.

jQuery(document).ready(function($) { 
    $(".vote_up").click(function(e) { 
     var unit$ = $(this).closest('.voteUnit'); 
     e.preventDefault(); 

     $.post('/wp-content/plugins/rate-my-whatever/rate.php', {vote_type: "1", post_id: unit$.find(".post_id").val()}, function(data) { 

     unit$.find(".vote_succ").html(data); 
     $.post('/wp-content/plugins/rate-my-whatever/rate.php', {action: "getPercentage", vote_type: "1", post_id: unit$.find(".post_id").val()}, function(data2) { 
      unit$.find(".up_perc").html(data2); 
     }); 
     $.post('/wp-content/plugins/rate-my-whatever/rate.php', {action: "getPercentage", vote_type: "2", post_id: unit$.find(".post_id").val()}, function(data3) { 
      unit$.find(".down_perc").html(data3); 
     }); 
    }); 
}); 
+0

спасибо jfriend00, очень хорошая работа, он прекрасно работает;) –

+0

@FannyAuray - как это кажется вы новичок здесь, на StackOverflow, ты понимаешь, что, когда вы задаете вопрос, и вы получите один или более приличный ответы, вы должны в конечном итоге отметить один из ответов как «лучший ответ», щелкнув галочку слева от ответа (чуть ниже стрелок вверх/вниз)? Это заработает несколько очков репутации для вас и для человека, который ответил. – jfriend00

+0

благодарит за информацию, сделанную с удовольствием! –