无论我点击什么div,jquery总是隐藏相同的div

时间:2011-01-24 01:37:25

标签: php javascript jquery codeigniter

我使用codeigniter构建了一个应用程序,我有一个显示用户消息的消息系统,这是通过foreach语句完成的。我在后台有一些JS,一旦用户点击特定消息的“删除”消息隐藏在视图中,而JS将消息ID发布到我的控制器并将该消息标记为已删除。发生的事情是,一旦用户点击删除,只有第一个消息隐藏(只有第一个foreach值),但所有其他消息都有单独的ID但没有响应删除点击。我还应该注意,如果我点击第一条消息隐藏的任何消息的“删除”而不是我点击的消息。

下面是一些代码:

查看

<?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 个答案:

答案 0 :(得分:1)

$("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');
        }
    })
});

demo with comments

答案 1 :(得分:0)

似乎你有一个共享“删除”类的锚链接集合,所以我认为这段代码总是会删除第一个。您可能想要指定锚点的特定索引,例如

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

其中x是此集合中的索引。

上帝我已经忘记了半年后如何在jQuery中编程!对不起,没有其他细节。

修改

也许更好的方法是检索用户点击的唯一ID,并将其rel传递给您的代码。