2013-04-24 2 views
0

Форма ввода количества корзины определяется с использованием кода ниже. Первоначально количество должно быть пустым.как проверить действительное целое количество befor submit в корзине

Форма передается через ajax с помощью jquery post().

Как проверить, что количество заполнено целым числом больше 0 перед подачей?

Я пробовал код ниже, но окно предупреждения возвращает [htmlinputelement], и поэтому проверка не выполняется.

<form class='browse-addtocart-form' action="<%= Url.Action("AddToCartPost", "Store")%>" method="post"> 
     <input class='amount ui-corner-all' name="quantity" type="number" value="" 
    size="3" min="0" step="1" /></span> 
    <input type="submit" value="Add to cart" /> 
     </form> 
    <script>  
    $(function() { 
$(".browse-addtocart-form").submit(function(event){ 
    var $form = $(this); 
    var serializedData = $form.serialize(); 
    alert($form[0].quantity); 
    if ($form[0].quantity==="" || $form[0].quantity==="0") { 
     alert('Please fill quantity with non zero integer'); 
     event.preventDefault(); 
     return; 
     } 
    $.post('<%= Url.Action("AddToCart", "Store")%>', 
     serializedData, function(response) { 
      $("#cart-status").text(response.Total); 
      showMessage(response.Message); 
      showFadeOutMessage(response.Message); 
     })); 
    event.preventDefault(); 
    }); 
    }); 
     </script> 

jquery, jquery UI, ASP.NET MVC2 используются.

+0

что вы имеете в виду 'таким образом проверить fails'? –

ответ

1

Самый простой способ - вызвать parseInt и проверить, что он не возвращает NaN.

var q = parseInt($form[0].quantity, 10); 
if(isNaN(q) || q === 0){ 
    alert('Please fill quantity with non zero integer'); 
} 

Отредактировано, чтобы добавить base = 10 в parseInt и использовать isNaN(). Без добавления явной базы из 10 parseInt будет принимать строку, начинающуюся с нуля, как восьмеричное число, и то же самое для hex.

+0

Спасибо. Я добавил выражение 'return false' для if. В этом случае окно предупреждения появляется только при первом щелчке. Последующие нажатия на кнопку игнорируются, событие отправки не запускается при нажатии кнопки. Как это исправить? – Andrus

+0

Боюсь, я не вижу ничего очевидного, что может привести к тому, что событие будет работать только в первый раз. Один трюк, который может помочь отладить это, если вы используете что-то вроде Firebug или встроенного отладчика Chrome, - это оценить данные («.browse-addtocart-form»). («События») и проверить, что обработчик отправки по-прежнему должным образом связана. Также проверьте журнал отладки на наличие ошибок или поместите контрольную точку в обработчик, чтобы убедиться, что она действительно не срабатывает. – izak

+1

'$ (" .browse-addtocart-form "). Data ('events')' returs undefined в командной строке FireBUg. Это не существует в firebug – Andrus

1

Небольшое примечание на вашем event.preventDefault();. Вы можете сделать return false; `и это также прекратит отправку вашего сообщения, для этого вам даже не нужен параметр события.

Как у вас уже есть var serializedData = $form.serialize();, я рекомендую вам извлечь из него «количество» с serializedData.quantity.

+0

Я использовал код из http: //stackoverflow.com/questions/5004233/jquery-ajax-post-example. Почему 'return false' не используется в этом примере оценки высоты? – Andrus

+0

Я понятия не имею. –

1

Попробуйте

$(function() { 
    $(".browse-addtocart-form").submit(function(event) { 
     var $form = $(this); 
     var serializedData = $form.serialize(); 
     if (this.quantity.value === "" || this.quantity.value === "0") { 
      alert('Please fill quantity with non zero integer'); 
      return false; 
     } 
     $.post('<%= Url.Action("AddToCart", "Store")%>', 
       serializedData, function(response) { 
        $("#cart-status").text(response.Total); 
        showMessage(response.Message); 
        showFadeOutMessage(response.Message); 
       }); 
     return false; 
    }); 
}); 
+0

Спасибо. Оповещение появляется только при первом щелчке. Последующие нажатия на кнопку игнорируются, отправьте метод, не вызываемый при последующих кликах. Только вход может использоваться для отправки. Как это исправить? – Andrus

Смежные вопросы