如何获取具有相同事件侦听器的两个元素的属性

时间:2018-02-20 20:59:53

标签: jquery

我的标题可能无法真正表达我想要实现的目标,下面是代码

<div class="modal fade" id="confirm-delete" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                <h4 class="modal-title" id="myModalLabel">Confirm Delete</h4>
            </div>
            <div class="modal-body">
                <p>You are about to delete an item.</p>
                <p>Do you want to proceed?</p>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
                <button type="button" class="btn btn-danger btn-ok">Delete</button>
            </div>
        </div>
    </div>
</div>

<div class='col-md-1 cart_action pull_right' title='delete item'>
   <i data-toggle='modal' data-target='#confirm-delete' class='glyphicon 
     glyphicon-trash deletecart' data-id=".$carts[$key]['id']." data-
     itemNo=".$carts[$key]['item_number'].">
   </i>
</div>

     function deletecart(id,item_no){
     var url = '{$url}'+'?itemNumber='+item_no+'&mode=remove&status=';
       $.ajax({
                    url: '{$deletecartUrl}',
        type: 'POST',
        data: {id: id},
        success: function (data) {  
                    if(data === 'success'){
                      window.location= url+data;
                  }else{
                      window.location= url+data;
                 }
               },
            error: function(jqXHR, errMsg) {
             // handle error
                console.log(errMsg);
            }
        });
   }


$('#confirm-delete').on('click','.btn-ok', '.deletecart', function(e) {
        var modalDiv = $(e.delegateTarget);
        id =  $(this).attr('data-id');
        item_no = $(this).attr('data-itemNo');
                    console.log(id); 
                    console.log(item_no); return;
        //deletecart(id,item_no);
        modalDiv.addClass('loading');
        setTimeout(function() {
            modalDiv.modal('hide').removeClass('loading');
        }, 1000)
    });

点击模态中的ok按钮我想获取data-id和data-itemNo的值,这样我就可以通过ajax发送,我能够在不使用BS模式的情况下使用下面的代码< / p>

    $(".deletecart").click(function(){
        id = $(this).attr('data-id');
        item_no = $(this).attr('data-itemNo');
        deletecart(id,item_no);
   });

但我认为使用模式会让它变得更酷,我尝试获取'#confirm-delete'的索引并使用它来获取".deletecart"的值,但索引总是-1,请任何人都可以帮忙解决这个问题,非常感谢

我编辑了我的问题并在下面发布了我的代码

 <?php 
//print_r($carts);exit;
  if(isset($carts) && !empty($carts)){
        foreach ($carts as $key => $cart){
            $myurl = Yii::$app->UrlManager->createUrl(['/item','Id'=>$carts[$key]['slug'].'/'.$carts[$key]['product_id'],'itmNo'=>$carts[$key]['item_number']]);
            echo "<div class='col-md-12 invisible-divider-20'></div>";
            echo "<div class='col-md-12'>";
            echo "<div class='tb_logo_cart pull_left'><img src=".$img."Logo_4_png.png alt=logo></div>";
            echo "<div class='small-text-12 pull_left store_name_link'>Store:&nbsp;<a href=>".$carts[$key]['store_name']."</a></div>";
            echo "</div>";

            echo "<div class='col-md-12 cart_body'>";
                    echo "<div class='checkbox'>"
                         . "<label class='check_container pull_left'>"
                                . "<input type='checkbox'class='cart-checkbox' data-class='cart-ck-5'>"
                                . "<span class='checkmark'></span>"
                         . "</label>"
                       . "</div>";

                echo "<div class='row nopadding'>";
                        echo "<div class='cart_item_img col-md-3 nopadding'><a href=".$myurl." class='nopadding'><img src=".$profileimg.$carts[$key]['profile_img']. "></a></div>";
                        echo "<div class='col-md-4 cart_title'>";
                             echo "<a href=".$myurl.">".$carts[$key]['title']."</a>";
                             echo "<div class='cart-condition text-muted'>Condition: ";
                                    if($carts[$key]['product_condition'] == 0){
                                        echo 'Not specified'; //if no item condition for this product show not specified
                                     }elseif($carts[$key]['product_condition'] == 1){
                                         echo "New with tags";
                                     }elseif($carts[$key]['product_condition'] == 2){
                                         echo "New without tags";
                                     }elseif($carts[$key]['product_condition'] == 3){
                                         echo "New with defects";
                                     }else{
                                         echo "Used";
                                     }
                             echo "</div>";
                             echo "<div class='cart-sizes text-muted'>Size:".$carts[$key]['size']."</div>";
                             echo "<div class='cart-color text-muted'>Color:".$carts[$key]['color']."</div>";
                        echo "</div>";
                        $total_price =  round(($carts[$key]['quantity']*$carts[$key]['price']),2);  
                        echo "<div class='col-md-1 cart_action pull_right' title='delete item'><i data-toggle='modal' data-target='#confirm-delete' class='glyphicon glyphicon-trash'></i></div>";
                        echo "<div class='col-md-2 cart_total_price pull_right'>";
                                echo "N:<span>".$total_price."</span>";
                                echo "<div class='cart-shipping'>Shipping: <b>FREE</b></div>";
                        echo "</div>";
                        echo "<div class='col-md-1 cart_qtty pull_right nopadding'>";
                             echo "<span class='cart-qtt-control'>";
                                 echo "<i class='glyphicon glyphicon-minus text-muted left-ctr' data-id=".$carts[$key]['id']." data-price=".$carts[$key]['price']."></i>";
                                 echo "<input type='text' value=".$carts[$key]['quantity'].">";
                                 echo "<i class='glyphicon glyphicon-plus text-muted right-ctr' data-id=".$carts[$key]['id']." data-price=".$carts[$key]['price']."></i>";
                             echo "</span>";
                             echo "</div>";
                             echo "<div class='col-md-1  cart_unit_price pull_right'>N:<span>".$carts[$key]['price']."</span></div>";

                echo "</div>";            

            echo "</div>";

            echo "<div class='modal fade' id='confirm-delete' tabindex='-1' role='dialog' aria-labelledby='myModalLabel' aria-hidden='true'>"
                    . "<div class='modal-dialog'>"
                       . "<div class='modal-content'>"
                            . "<div class='modal-header'>"
                                . " <button type='button' class='close' data-dismiss='modal' aria-hidden='true'>×</button>"
                                . " <h4 class='modal-title' id='myModalLabel'>Confirm Delete</h4>"
                            . "</div>"

                            . "<div class='modal-body'>"
                                . " <p>You are about to delete an item.</p>"
                                 . "<p>Do you want to proceed?</p>"
                            . "</div>"

                            . "<div class='modal-footer'>"
                                . "<button type='button' class='btn btn-default' data-dismiss='modal'>Cancel</button>"
                                . "<button type='button' class='btn btn-danger btn-ok' data-id=".$carts[$key]['id']." data-itemNo=".$carts[$key]['item_number'].">Delete</button>"
                            . "</div>"
                    . "</div>"
                 . "</div>"
               . "</div>";

        }
    }

&GT;

function deletecart(id,item_no){
 var url = '{$url}'+'?itemNumber='+item_no+'&mode=remove&status=';
   $.ajax({
                url: '{$deletecartUrl}',
    type: 'POST',
    data: {id: id},
    success: function (data) {  
                if(data === 'success'){
                  window.location= url+data;
              }else{
                  window.location= url+data;
             }
           },
        error: function(jqXHR, errMsg) {
         // handle error
            console.log(errMsg);
        }
    });
   }


$('#confirm-delete').on('click','.btn-ok', '.deletecart', function(e) {
        var modalDiv = $(e.delegateTarget);
        id =  $(this).attr('data-id');
        item_no = $(this).attr('data-itemNo');
                    console.log(id); 
                    console.log(item_no); return;
        //deletecart(id,item_no);
        modalDiv.addClass('loading');
        setTimeout(function() {
            modalDiv.modal('hide').removeClass('loading');
        }, 1000)
    });

1 个答案:

答案 0 :(得分:0)

在这些情况下我通常做的是将数据值注入模态html:

<button type="button" class="btn btn-danger btn-ok" data-id="..." data-itemNo="...">Delete</button>

甚至:

<div class="modal fade" id="confirm-delete" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-id="..." data-itemNo="...">

然后获取值是onclick是微不足道的。 Imo最好的方法是使用像Nunjucks这样的js模板系统。当单击初始删除按钮时,通过Nunjucks动态生成模态html(而不是在页面上对模式html进行编码)。另一种选择是使用jquery / js来注入数据值。