иметь дело с div в течение цикла - PullRequest
1 голос
/ 16 марта 2011

У меня есть цикл while, показывающий элементы данных из базы данных, я хочу иметь дело с каждым элементом отдельно, но я получаю только первый div, для каждой итерации я хочу взять 'id' текущей итерации и обработать с ним это выглядит как «как» в Facebook, когда я нажимаю на первое «как», jquery запускает функцию $.post(..) и все идет хорошо: обработки выполняются с этим идентификатором, но когда я нажимаю на другой следующий «как», метод сообщения все еще отправляет первый идентификатор (проверено firebug), код:

<script type='text/javascript>
  $("#like").click(function(){
    $.post("done.php",
      {id:$("#id").val()},
      function(data){
        ...
      });
   });
</script>

<body>
$result = myqsl_query("select * from ...");
while($fetch = mysql_fetch_array($result){
..
echo "<input id='id' value='$fetch[0]'>
<a href='...' id='like'>like</a>";
..
</body>

Надеюсь, мне удалось описать проблему! Любое решение с любым языком будет оценено! Привет.

Ответы [ 4 ]

2 голосов
/ 16 марта 2011

Если ваш конечный результат выглядит примерно так:

<input id='id' value='someValue'>
<a href='someLink' id='like'>like</a>
...
<input id='id' value='someValue'>
<a href='someLink' id='like'>like</a>

Вызовет проблему, так как идентификатор должен быть уникальным для каждого дом.

Вы можете переделать его для использования классов:

<input class="likeId" value='someValue'>
<a href='someLink' class='like'>like</a>
...
<input class="likeId" value='someValue'>
<a href='someLink' class='like'>like</a>

А чем в вашем обработчике кликов.

$(".like").click(function(){
    $.post("done.php",
      {id:$(this).prev('.likeId').val()},
      function(data){
        ...
    });
});

В зависимости от того, является ли входное значение скрытым, вы можете удалить его полностью и использовать атрибуты html data-* и .data(), если предполагается, что вы можете использовать jQuery больше, чем 1.4.3.

<a href='someLink' class='like' data-likeId='someValue'>like</a>
<a href='someLink' class='like' data-likeId='someValue'>like</a>

$(".like").click(function(){
    $.post("done.php",
      {id:$(this).data('likeId')},
      function(data){
        ...
    });
});
1 голос
/ 16 марта 2011

ID должны быть уникальными в файле HTML. Если у вас есть несколько элементов с одинаковым идентификатором, браузеры возвращают только первый элемент. Таким образом, $('#like').click() только присоединяет обработчик события щелчка к первому элементу с этим идентификатором.

Вместо этого вы должны использовать классы:

<script type='text/javascript>
  $(".like").click(function(){
    $.post("done.php",
      {id:$(this).prev().val()},
      function(data){
        ...
      });
   });
</script>

<body>
<?php
    $result = myqsl_query("select * from ...");
?>
<?php while(($fetch = mysql_fetch_array($result))): ?>
    <input class="something" value="<?php echo $fetch[0]; ?>" />
    <a href="..." class="like">like</a>
<?php endwhile; ?>
</body>

Дополнительные примечания:

  • Вы не должны echo HTML, его сложно поддерживать. Вместо этого вставьте PHP в HTML, как я показал выше.
  • Я также использую альтернативный синтаксис для структур управления , который легче читать, если вы смешиваете HTML и PHP.
0 голосов
/ 16 марта 2011

Вы говорите «сначала как», поэтому я предполагаю, что у вас есть много кнопок «Мне нравится» на странице.

$("#like").click(function(){

, но стандарты говорят, что идентификаторы должны быть уникальными.Может быть, глобальная переменная, которая повторяет и добавляет итерацию к идентификатору, такую ​​как '#like1', '#like2' и т. Д.

Не уверена, приведет ли это к вашему ответу, но это то, что требует рассмотрения.

0 голосов
/ 16 марта 2011

Может быть, вы могли бы сделать что-то вроде этого:

<script type='text/javascript>
   $(".like").click(function(){
      $.post("done.php",
         {id:$("#id").prev("input").val())},
         function(data){
         ...
      });
   });
</script>

<body>
    $result = myqsl_query("select * from ...");
    while($fetch = mysql_fetch_array($result){
    ..
    echo "<input name='id' value='$fetch[0]'>
    <a href='...' class='like'>like</a>";
    ..
</body>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...