jquery remove按钮无法从数据库中删除行

时间:2012-05-12 12:22:06

标签: jquery button

我有一个列表,其中每个li都包含一个删除按钮,可以在单击时删除它,也可以从我的数据库中删除所选的框数据。我创建了一个id biz_watch'。$ biz_watch_id。'这是每个盒子独有的。使用$ .get调用服务器端php脚本来删除表行。

但脚本不起作用。如果我要删除get函数,我可以删除这些框,但是使用.get命令,无法再删除这些框。以下是代码

    foreach($biz_watchlist as $biz_watchlist1){
         echo '<li class="biz_watch" id="biz_watch'.$biz_watch_id.'">';
         echo '<table style="width:100%">';
         echo '<td style="width:50%">';
         echo $biz_watch_details['5'];
         echo ' | <a class="remove_watch" id="remove_watch'.$biz_watch_id.'">remove</a>';
         echo '</td>';
         echo '<td>';
         echo '<span style="float:right">'.$biz_watch_details['19'].'</span>';
         echo '</td>';
         echo '</table>';
         echo '</li>';
    }

    <script type="text/javascript">
     $(document).ready(function(){
        $('.remove_watch').click(function(){
            var li = $(this).closest('li.biz_watch');
            var action = '../delete_watchlist.php';
            var data = { id:13};
               $.post(action, data, function(){
                 li.fadeOut('slow', function() {
                     li.remove();
                 });
               });
        });
    });
    </script>

我的服务器端脚本

      <?php
        $id = $_POST["id"];

        $query = "DELETE FROM dz0yn_biz_watchlist WHERE biz_id = $id";
        $delete_watch_row = mysql_query($query);
      ?>

2 个答案:

答案 0 :(得分:2)

您应该使用post()而不是get()

$.post('/.../delete_watchlist.php', {id: $(this).closest('.biz_watch').attr('id')},function(){
    $(this).closest('.biz_watch').fadeOut("slow");
});

jquery4u blog总结得很好:

  

如果表单的处理是幂等的(即它对世界状态没有持久的可观察效果),那么表格方法应该是GET。许多数据库搜索没有明显的副作用,并且是查询表单的理想应用程序。

     

如果与表单处理相关联的服务有副作用(例如,修改数据库或订阅服务),则该方法应为POST。

修改

您正在动态创建表,这意味着在完全创建表之前调用.ready;因此,很可能不会在所有行上创建点击功能。

您需要使用on()事件将事件应用于稍后可能会创建的对象。

$(document).ready(function(){
    $('.remove_watch').on("click", function(){
        $.get('/.../delete_watchlist.php', {id:  $(this).closest('.biz_watch').attr('id')},function(){
            $(this).closest('.biz_watch').fadeOut("slow");
        });
    });
});

修改

最后一次尝试:P。由于您只需要12的id而不是整个biz_watch12,您可以使用replace从您的id中删除biz_watch以发送到服务器。

$(this).closest('.biz_watch').attr('id').replace("biz_watch", "");

答案 1 :(得分:2)

  1. 使用/前缀相对目录(..)将其转换为引用自身的绝对路径。这有点无意义。第一个/应该删除('../ delete_watchlist.php')。

  2. 分解你的脚本。你试图在一行中混合太多东西,这使问题变得混乱。

  3. 假设您的服务器端脚本成功,这应该可以实现您所追求的目标。

    $(document).ready(function(){
        $('.remove_watch').click(function(){
            var li = $(this).closest('li.biz_watch');
            var action = '../delete_watchlist.php';
            var data = { id: li.attr('id').substr(9) };
            $.post(action, data, function(){
                li.fadeOut('slow', function() {
                    li.remove();
                });
            });
        });
    });