JQuery всегда скрывает один и тот же Div независимо от того, что Div я нажимаю - PullRequest
2 голосов
/ 24 января 2011

Я создал приложение, используя codeigniter, и у меня есть система сообщений, которая отображает сообщения пользователей, это делается с помощью оператора foreach.У меня есть некоторый JS в фоновом режиме, который, как только пользователь нажимает «удалить» определенного сообщения, которое скрывается от просмотра сообщения, в то время как JS отправляет идентификатор сообщения на мой контроллер и помечает это сообщение как удаленное.Однако происходит то, что когда пользователь нажимает кнопку «Удалить», скрывается только первое сообщение (только первое значение foreach), но все остальные сообщения имеют отдельные идентификаторы, но не отвечают на щелчок удаления.Я также должен отметить, что если я нажимаю «удалить» любого сообщения, первое сообщение скрывается, а не сообщение, на которое я щелкнул.

вот какой-то код:

Просмотр

<?php foreach ($rows as $r) : ?>
<li id="notification_<?php echo $r['MID']; ?>"><?php echo anchor("$r[MID]", 'X', array('class'=>'delete', 'rel'=>"$r[MID]")); ?>
<p>
<?php echo anchor("headless/view_msg/$r[MID]", $r['head'], array('rel'=>'notifications')); ?>
<?php if(strlen($r['body'] >= 74)) : ?>
<?php echo $r['body']; ?>
 <?php else : ?>
<?php echo substr($r['body'], 0, 74) . "..."; ?>
<?php endif; ?>
</p>
</li>
<?php endforeach; ?>

JS:

    $("a.delete").click(function(eve) {
    eve.preventDefault();

    var MID = $("a.delete").attr('rel');

    $.post('headless/notification_read', {
        MID: MID},

    function(html){
        if(parseFloat(html)){

            $('#notification_' + MID).hide('slow')
            console.log('success');

        }else{

            console.log('fail');
        }
    })

});

Я не уверен, что здесь происходит, но я предполагаю, что javascript связывает только первый foreach, а не остальные (если так, как бы я это исправить)

Любая помощь будет оценена.

Спасибо.

Ответы [ 2 ]

1 голос
/ 24 января 2011
$("a.delete").click(function(eve) {
    eve.preventDefault();

    var MID = this.rel; // `this` would be the element being clicked on....
    //var MID = $("a.delete").attr('rel'); this line is the problem....

    $.post('headless/notification_read', {
        MID: MID},

    function(html){
        if(parseFloat(html)){

            $('#notification_' + MID).hide('slow')
            console.log('success');

        }else{

            console.log('fail');
        }
    })
});

демо с комментариями

0 голосов
/ 24 января 2011

похоже, у вас есть коллекция якорных ссылок, которые разделяют класс "delete", поэтому я думаю, что этот фрагмент кода всегда будет удалять самый первый.Возможно, вы захотите указать конкретный индекс привязки, например,

$("a.delete")[x].attr('rel')

, где x - это индекс в этой коллекции.

Боже, я уже забыл, как программировать в jQuery после половиныгод!Извините, никакие другие подробности не могут быть предоставлены.

Редактировать:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...