【问题标题】:HTML/PHP questionHTML/PHP 问题
【发布时间】:2011-01-08 03:04:05
【问题描述】:

我的问题相当直截了当。我正在从 mysql 表创建一个表,表中的每一行都包含数据库中的记录。对于每条新记录,都会创建一个新行,依此类推,直到没有更多记录返回。我想给他们一个删除记录的选项,所以我想给每一行它自己的类名,所以我试图将 php 代码回显到类名中。

看起来像这样:

<tr class="name<?php echo $row['id'];?>">

如果 $row['id'] 为 1,那么类会是 name1 吗?

好吧,既然我得到了确认,我正在使用 jQuery 删除记录而不是重新加载页面。

我想要做的是当用户单击一个按钮时,我使用 AJAX 删除数据库和屏幕上的记录。我可以从数据库中删除它,但我无法在屏幕上删除它而不重新加载页面。

这是我的 jQuery 代码:

$(".delete").click(function(){
    var delete_id = "delete_id="+$(this).attr("id")
    $.ajax({
        type: "POST",
        dataType: "HTML",
        url: "deleteScript.php",
        data: delete_id,
        success: function(data) {
            $(".name"+$(this).attr("id")).remove();
        }
    });
});

这不应该删除屏幕上带有类名的任何内容吗?我已经使用 alert 来确保 .name"+$(this).attr("id") 是正确的,并且它返回了我认为的结果。所以我现在很困惑我哪里出错了。

帮助?

【问题讨论】:

  • 在你说“所以我想给每一行它自己的类名”之前,一切都变得有意义了——这与删除记录有什么关系?
  • 应该是。尝试后会发生什么?
  • 最好给它一个id而不是一个类。
  • 不,不是作业。这是我为今年夏天工作的公司做的一个购物车系统。

标签: php jquery html


【解决方案1】:

您的代码的问题在于以下行:

$(".name"+$(this).attr("id")).remove();

由于您在 AJAX 成功处理程序中,this 指的是 XMLHTTPRequest 对象, 指的是触发事件的元素。您应该缓存元素以在成功处理程序中使用。

您的代码最终应如下所示:

$(".delete").click(function(){
    var delete_id = "delete_id="+this.id,
        self = this; // cache this
    $.ajax({
        type: "POST",
        dataType: "HTML",
        url: "deleteScript.php",
        data: delete_id,
        success: function(data) {
            $(".name"+self.id).remove(); // use self rather than this
        }
    });
});

还要注意,我使用了this.id,因为它比$(this).attr('id') 快得多(20 倍或更多)。

【讨论】:

  • 太棒了!这正是我所需要的。非常感谢!
  • 20 倍?你在哪里找到这个数据的?我认为如果 jQuery 存在,它只会使用该属性。无论如何,在这种情况下它是微不足道的。
  • @Ralph jsPerf example。请注意,20 倍是一个非常的保守估计。推广良好做法总是好的!
  • 有趣。很酷的网站。你似乎是正确的。 (FF 中 38 倍)
【解决方案2】:

是的,如果$row['id'] 为 1,则类名将是“name1”。不过,您可以查看输出 HTML 来确认这一点。

另外,我不确定这如何帮助您解决删除记录问题。我会添加一个额外的列来实现

<td><a href="/delete-row.php?id=<?=$row['id']?>">Delete</a></td>

然后这就是花哨的裤子 omg-you-have-to-use-POST-guys 开始尖叫的地方,所以这可能会将您带到一个确认页面,您可以在其中使用带有删除按钮的表单。


如果您使用 jQuery,那么从技术上讲,您应该使用“id”而不是“class”属性,但我仍然会这样做 this 方式,然后 ajaxify 链接所以它不会带你到另一个页面。这样,如果用户禁用了 JS,它就不会爆炸,他们只是有一个稍微使用用户友好的删除方式。

【讨论】:

  • 拉尔夫是正确的(他击败了我——干得好)。你的例子很好。除非您使用 DOM 或 jQuery 之类的库来通过 Id 或类获取行,否则无需使用类甚至 Id。哦,拉尔夫——尖叫尖叫!!
  • 是的,我正在尝试使用 jQuery 逐类获取行。
猜你喜欢
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2011-04-26
  • 1970-01-01
  • 2011-11-24
  • 2011-08-25
  • 2011-08-31
相关资源
最近更新 更多