2016-03-23 9 views
1

2 giriş değerine dayanan gizli bir metin kutusunu güncelleyen basit bir JS işlevine sahibim. Ben gizli metin kutusu güncellemeden önceparseInt (x, 10) max callstack neden oluyor/çok fazla yineleme hatası

, ben niye bu çok fazla özyinelemeye neden olan 0'a

değer kümesi değilse, o giriş sayısalsa doğrulamak için parseInt (10 x) kullanan hata?

$(function() { 
     $("#payment-form").on("submit",function (e) { 

      var xDollars = $("#dollars").val(); 
      var xCents = $("#cents").val(); 
      //collect our form dollar and cents values, set to 0 if not int 
      if (parseInt(xDollars, 10) == "NaN") { 
       $("#dollars").val("0"); 
      } 
      if (parseInt(xCents, 10) == "NaN") { 
       $("#cents").val("00"); 
      } 

      //join dollars and cents and submit transaction amount 
      $("#TransactionAmount").val(xDollars + "." + xCents); 
      $("#payment-form").submit(); 
      return true; 
     }); 
    }); 
+2

Hatanız 'parseInt()' ile ilgisi yok, çünkü olay işleyicisi içinde yakaladığınız olayı bazı garip nedenlerden dolayı yükseltiyorsunuz. Neden tekrar 'submit()' diyorsun? –

+0

Neden birinin bunu kapatmak için oy kullandığını bilmek ister misiniz? Bence bu oldukça meşru bir soru. – Mark

+0

Sadece UI perspektifinden .. değerlerden biri sayısal değilse, gönderim isteğini iptal etmek ve bir form hatası görüntülemek istemez miydiniz? –

cevap

7

Bu sizin soruna neden parseInt() değil, o da şu: Sen "Gönder" işleyici içinden "Gönder" eylemi tetikleyen ediyoruz

 $("#payment-form").submit(); 

.

Doğrulama başarılı olursa, form true'u döndürürseniz, form normal olarak gönderilmelidir.

+0

omg, Bunu tamamen gözden kaçırdım. Teşekkür ederim. – Mark

2

Çünkü jQuery, bir formun submit olayı aracılığıyla mı yoksa .submit() yöntemiyle mi gönderileceğini ayırt etmez. Bu nedenle, jQuery's $.submit() kullanırsanız, bir submit olayını el ile tetikler.

Bunun yerine vanilla-j'leri kullanın. Eğer .submit() kullanırsanız Form submission algorithm göre, bu etkinliği tetiklenir olmaz:

submit() yönteminden gönderilen bayrağı ayarlanmazsa, daha sonra fire a simple eventformuyla, kabarcıklar ve submit adlı iptal olduğunu. Etkinliğin varsayılan eylemi önlenirse (yani etkinlik iptal edilirse ) bu adımları iptal edin. Aksi halde, 'a devam edin (etkin eylem, gönderimi gerçekleştirmek için etkin olarak gerçekleştirilir).

document.getElementById('payment-form').submit(); 

Ancak bu durumda sadece $("#payment-form").submit(); kaldırabilirsiniz:

Bu nedenle, bu sorunlu olmazdı. Etkinliği iptal etmezseniz, form otomatik olarak gönderilmelidir.

İlgili konular