Я перестал пытаться использовать onblur или focusout для отправки формы, потому что это вызвало обновление страницы. Теперь я использую кнопку, и она использует сообщение ajax и очищает поле qty при добавлении элемента.
Моя проблема сейчас в том, что IE8 не очень хорошо работает с этим решением.
$('.qty').change('input[type=text]').val('');
Это работает в FF, Chrome и Safari, но не работает в IE8. В IE8, когда пользователь нажимает кнопку «Добавить элемент», форма отправляется и страница обновляется. Очевидно, что вызов ajax терпит неудачу в IE8. Я просто не могу понять, почему. Нужно ли предотвращать действие по умолчанию перед вызовом .change?
фрагмент из jcart-javascript.php
// SEND ITEM INFO VIA POST TO INTERMEDIATE SCRIPT WHICH CALLS jcart.php AND RETURNS UPDATED CART HTML
// $.post('<?php echo $jcart['path'];?>jcart-relay.php', { "<?php echo $jcart['item_id']?>": itemId, "<?php echo $jcart['item_price']?>": itemPrice, "<?php echo $jcart['item_name']?>": itemName, "<?php echo $jcart['item_qty']?>": itemQty, "<?php echo $jcart['item_add']?>" : itemAdd }, function(data) {
$.post('<?php echo $jcart['path'];?>jcart-relay.php', postData, function(data) {
//JSTN-end
// REPLACE EXISTING CART HTML WITH UPDATED CART HTML
$('#jcart').html(data);
$('.jcart-hide').remove();
$('.qty').change('input[type=text]').val('');
});
// PREVENT DEFAULT FORM ACTION
return false;
});
// WHEN THE VISITOR HITS THEIR ENTER KEY
// THE UPDATE AND EMPTY BUTTONS ARE ALREADY HIDDEN
// BUT THE VISITOR MAY UPDATE AN ITEM QTY, THEN HIT THEIR ENTER KEY BEFORE FOCUSING ON ANOTHER ELEMENT
// THIS MEANS WE'D HAVE TO UPDATE THE ENTIRE CART RATHER THAN JUST THE ITEM WHOSE QTY HAS CHANGED
// PREVENT ENTER KEY FROM SUBMITTING FORM SO USER MUST CLICK CHECKOUT OR FOCUS ON ANOTHER ELEMENT WHICH TRIGGERS CHANGE FUNCTION BELOW
$('#jcart').keydown(function(e) {
// IF ENTER KEY
if(e.which == 13) {
// PREVENT DEFAULT ACTION
return false;
}
});