带弹出窗口的Jquery单击事件

时间:2014-02-15 16:44:07

标签: javascript jquery

我有以下代码并且它无法正常工作,基本上我愿意在我的点击事件上添加弹出窗口以确认删除但是当我点击首先删除行然后弹出apppear时,我卡住了并且不明白什么是去,这是我的代码

$.fn.matrix.deleteCategory = function ( jqObj ) {

     jqObj.find("#award").on('click', ".categoryminus", function () {



        var CategoryClass = $(this).closest('tr').attr('class'); // table row Class 
         //split all class of current table row
        var CategoryArray = CategoryClass.split(' ');
         //delete all rows having class like C-1-o-1
        var categoryClassLike        = '[class^=' + CategoryArray[0] + '-o-]';

         //for rTenderDocument,check delete c-2,c-3 and appear popup
         if ( formType == 'rTenderDocument') {

            if ( CategoryArray[0] == 'C-2' ){

                $('#priceConfirm').bPopup();

                $('.priceConfirm').click(function(){

                    if($(this).attr('id') == 'priceDeleteNo'){
                        $('#priceConfirm').bPopup().close(); 
                        return false;

                     } else {
                        $('#priceConfirm').bPopup().close();
                        return true;

                     }
                }); 
            } else if ( CategoryArray[0] == 'C-3' ){

                $('#fixedAnnualConfirm').bPopup();

                $('.fixedAnnualConfirm').click(function(){

                    if($(this).attr('id') == 'fixedAnnualDeleteNo'){
                        $('#fixedAnnualConfirm').bPopup().close(); 
                        return false;

                     } else {
                        $('#fixedAnnualConfirm').bPopup().close();
                        return true;

                     }
                }); 
            }

         }  

         //remove all child of sub category
         $( categoryClassLike ).each(function(){

             var obj              = $(this);

             var subCategoryClass = obj.closest('tr').attr('class'); // table row Class 
             //split all class of current table row
             var subCategoryArray = subCategoryClass.split(' ');
             //delete all rows having class like C-1-o-3-So-1
             var classLike        = '[class^=' + subCategoryArray[0] + '-So-]';

            //remove all child of sub category
             $( classLike ).each(function(){
                 $(this).remove();
             });

             //remove sub category
              obj.remove();
         });

          //after removing child then delete their parent
          $(this).closest('tr').remove();

     });

     return jqObj;
   };

1 个答案:

答案 0 :(得分:0)

我不确定你的代码是做什么的 - 但我会再给你一个 做你想做的事情(基于表和弹出确认)

看看这个小提琴:JSFiddle Demo

我创建了一个包含del按钮的行的基本表:

<table>
    <tr><td>ID</td><td>NAME</td><td>ACTION</td></tr>
    <tr>
        <td><div>1</div></td>
        <td><div>Booba</div></td>
        <td><div><button class='del'>Delete</button></div></td>
    </tr>
    <tr>
        <td><div>2</div></td>
        <td><div>Johnas</div></td>
        <td><div><button class='del'>Delete</button></div></td>
    </tr>
    <tr>
        <td><div>3</div></td>
        <td><div>Coolio</div></td>
        <td><div><button class='del'>Delete</button></div></td>
     </tr>
</table>

添加了一个弹出式容器,其中包含消息,按钮并隐藏它:

<div class='popup' id='popup' style='display:none'>
    <div>
        <p>Please confirm the delete action</p>
        <button id='confirm'>Proceed</button>
        <button id='cancel'>Cancel</button>
    </div>
</div>

现在为Magic部分〜因为你可以看到我正在使用一个变量来存储 我希望在显示弹出窗口之前删除该行,并且仅在“继续”按钮时删除 单击此元素将被删除(否则将重置变量并删除弹出窗口):

$(function(){

//element to delete:
   var ele_del;

// Expose popup message when del button clicked:
   $('button.del').click(function(){
       event.preventDefault();
           $('#popup').fadeIn('slow');
           ele_del = $(this).closest('tr');
       return false;
    });

//delete if proceed clicked:
    $('button#confirm').click(function(){
        event.preventDefault();
            $('#popup').fadeOut('slow',function(){
               $(ele_del).find('div').each(function(){
                   $(this).slideUp('slow',function(){
                      $(ele_del).remove();
                      ele_del = "";
                   });
                });
             });
         return false;
    });

//cancel delete operation:
    $('button#cancel').click(function(){
        event.preventDefault();
            $('#popup').fadeOut('slow',function(){
                ele_del = "";
            });
        return false;
     });
});

备注:

  1. 我在TD的内部使用“DIV”来实现跨浏览器的slideUp效果。有些浏览器不会直接滑动TR。
  2. 整个脚本基于效果回调函数 - 如果您不想使用效果,可以删除div并直接删除TR。
  3. 如果你使用动态表(动态添加行而不是所有DOM都准备就绪)只需使用“.on('click'”而不是我使用的.click()。
  4. 玩得开心!