2015-09-21 117 views
0

我通過下面的OOP功能使用按鍵來更新我的網站購物車和數量值。有時它可以工作,但大多數情況下,當我按下回車鍵時,它不會a)更新購物車,也不b)更新數量值。我認爲這是刷新頁面,這可能是問題。e.keyCode 13(enter key)and keypress event to update basket sometimes not working

我通過檢查qty元素來查看請求標頭值,並且在按下輸入鍵時不更新,如果有幫助的話。

function initBinds() { 
    if ($('.remove_basket').length > 0) { 
     $('.remove_basket').bind('click', removeFromBasket); 
    } 
    if ($('.update_basket').length > 0) { 
     $('.update_basket').bind('click', updateBasket); 
    } 
    if ($('.fld_qty').length > 0) { 
     $('.fld_qty').bind('keypress', function(e) { 
      var code = e.keyCode ? e.keyCode : e.which; 
      if (code == 13) { 
       updateBasket(); 
      } 
     }); 
    } 
} 

而這裏的updateBasket功能

function updateBasket() { 
    $('#frm_basket :input').each(function() { 
     var sid = $(this).attr('id').split('-'); 
     var val = $(this).val(); 
     $.ajax({ 
      type: 'POST', 
      url: '/mod/basket_qty.php', 
      data: ({ id: sid[1], qty: val }), 
      success: function() { 
       refreshSmallBasket(); 
       refreshBigBasket(); 
      }, 
      error: function() { 
       alert('An error has occurred'); 
      } 
     }); 
    }); 
} 

而且,這是網頁...

注意,你可以在網上看到41類fld_qty用於initiBinds按鍵函數if語句。

<?php 

$session = Session::getSession('basket'); 
$objBasket = new Basket(); 

$out = array(); 

if (!empty($session)) { 
    $objCatalogue = new Catalogue(); 
    foreach ($session as $key => $value) { 
     $out[$key] = $objCatalogue->getProduct($key); 
    } 
} 

    require_once('_header.php'); ?> 

    <div id="cat_prod"><h1>- BASKET -</h1></div> 

<?php 

if (!empty($out)) { ?> 

<div id="big_basket"> 
    <form action="" method="post" id="frm_basket"> 
    <table cellpadding="0" cellspacing="0" border="0" class="tbl_repeat"> 
     <tbody id="basket_table"> 
     <tr style="background-color: #f2f3ee;"> 

      <th class="ta_left">Item</th> 
      <th class="ta_r">Qty</th> 
      <th class="ta_r col_15">Price</th> 
      <th class="ta_r col_15"></th> 

     </tr> 

     <?php foreach ($out as $item) { ?> 

     <tr> 
      <td class="ta_left_name"><?php echo Helper::encodeHTML($item['name']); ?></td> 
      <td class="ta_left_qty"><input type="text" name="qty-<?php echo $item['id']; ?>" 
        id="qty-<?php echo $item['id']; ?>" class="fld_qty" 
        value="<?php echo $session[$item['id']]['qty']; ?>" /></td> 
      <td class="ta_r">&pound;<?php echo number_format($objBasket->itemTotal($item['price'], $session[$item['id']]['qty']), 2); ?></td> 
      <td class="ta_r">&#160;<?php echo Basket::removeButton($item['id']); ?></td> 

     </tr> 

     <?php } ?> 

     <?php if ($objBasket->_vat_rate != 0) { ?> 

     <tr style="border-bottom: dashed 1px #aaa"> 

      <td class="ta_left" colspan="2">Sub-total :</td> 
      <td class="ta_r bt_td">&pound;<?php echo number_format($objBasket->_sub_total, 2); ?></td> 
      <td class="ta_r bt_td">&#160;</td> 

     </tr> 

     <tr style="border-bottom: dashed 1px #aaa"> 

      <td class="ta_left" colspan="2">VAT (<?php $objBasket->_vat_rate; ?>%) :</td> 
      <td class="ta_r bt_td">&pound;<?php echo number_format($objBasket->_vat, 2); ?></td> 
      <td class="ta_r bt_td">&#160;</td> 

     </tr> 

     <?php } ?> 

     <tr> 

      <td class="ta_right" colspan="2"><strong>Total :</strong></td> 
      <td class="ta_r bt_td">&pound;<?php echo number_format($objBasket->_total, 2); ?></td> 
      <td class="ta_r bt_td">&#160;</td> 

     </tr> 

     </tbody> 
    </table> 

    <div class="dev br_td">&#160;</div> 
    <div class="dev br_td">&#160;</div> 

    <div class="sbm sbm_blue fl_r"> 

    <a href="/?page=checkout" class="btn">Checkout</a> 

    </div> 

    <div class="sbm sbm_blue fl_l update_basket"> 

    <span class="btn">Update</span> 

    </div> 

    </form> 
</div> 

<?php } else { ?> 

<br /> 
<br /> 
<p><em>Your basket is currently empty.</em></p> 


<?php } ?> 

<?php require_once('_footer.php'); ?> 

我已經經歷了這方面的一些statckflow網頁一看,已經嘗試的keydown,只是使用e.whiche.keyCode || e.which代替,但它們都呈現當您按下回車鍵不工作100%的時間同樣的問題。

我知道一些瀏覽器可能不支持這個,所以這個操作有沒有更好的方法?我測試過Firefox,Chrome和Safari(全部最新)。

感謝您的幫助,感謝! :)

編輯;

這裏的MOD/basket_qty.php也...

<?php 
require_once('../inc/autoload.php'); 

if (isset($_POST['qty']) && isset($_POST['id'])) { 

    $out = array(); 
    $id = $_POST['id']; 
    $val = $_POST['qty']; 

    $objCatalogue = new Catalogue(); 
    $product = $objCatalogue->getProduct($id); 

    if (!empty($product)) { 

     switch($val) { 
      case 0: 
      Session::removeItem($id); 
      break;   
      default: 
      Session::setItem($id, $val); 
     } 
    } 
} 
+1

你試過了嗎if(code == 13){e.preventDefault(); ''?你做了什麼調試? – cmorrissey

+0

這似乎現在工作,謝謝! :) –

回答

0

看起來我需要在initBinds功能添加e.preventDefault();if (code == 13) {cmorrissey指出。這似乎是工作得很好。謝謝!!