2015-05-23 43 views
0

我一直在試圖做一個if參數,它將檢查幾個輸入(具有相同類)是否有幾個負數的值。 如果其中一個人有,我想有一個錯誤消息。 我一直在嘗試這樣做,並且我得到了我想要的錯誤消息,但它仍會繼續執行下一步事件,儘管我編寫了return和event.preventDefault。 My Fiddle如何在一起輸入多個輸入參數?

我下面的代碼:

$("#inventoryForm").submit(function (event) { 
      $(".inventoryInput").each(function(){ 
      if($(this).val() < 0) { 
      event.preventDefault(); 
      $("#inventoryError").slideDown().text("blablabla"); 
      ; 
      return; 
      } 
     }); 
}); 
+2

如果我不是錯 – imbondbaby

+0

沒有工作,應返回false。無論如何,我認爲這不重要,如果我返回false或沒有.. –

+1

請使用html – imbondbaby

回答

1

您的問題來自您的其他代碼。 event.preventDefault()不會退出提交處理程序,它只會阻止默認表單提交行爲。

這裏是你可以做什麼:

$("#inventoryForm").submit(function (event) { 
     var error = false; 

     //You seem to always want to prevent the default behavior 
     event.preventDefault(); 

      $(".inventoryInput").each(function(){ 
      if($(this).val() < 0) { 

       error = true; //Indicate there was an error 
       $("#inventoryError").slideDown().text("blablabla"); 
       return false; //This stops the iteration 
      } 

     }); 

     //Stop processing if there was an error 
     if (error) return; 

     $("#inventorySubmit").hide(); 
     $("#inventoryChange").show(); 
     $("#withdraw").show(); 
     $(".inventoryInput").attr('disabled','disabled'); 
     sum = 0; 
     /* var money = table.find("td:nth-child(2)"); 
     for (var i = 0; i<money.length; i++) { 

     } 
     */ 
    }); 

順便說一句代碼更是consise沒有jQuery的:

var inputs = [].slice.call(document.querySelectorAll('.inventoryInput')); 

if (inputs.some(haveValueUnderZero)) { 
    //error 
} 

function haveValueUnderZero(input) { return input.value < 0; } 
+0

工作。謝謝!只是一個問題,爲什麼我需要在函數之外做一個if參數而不是返回false,就是這樣? –

+0

@ronilitman你的'return false'在'.each'回調函數中。因此,您只能從該函數返回並停止迭代,但控制權會返回到提交回調函數。你也必須早日退出該功能。 – plalx

0

試試這個:

$("#inventoryForm").submit(function (event) { 
    event.preventDefault(); 
    $(".inventoryInput").each(function() { 
     if ($(this).val() < 0) { 
      $("#inventoryError").slideDown().text("blablabla"); 
      return false; 
     } else { 
      $("#inventorySubmit").hide(); 
      $("#withdraw").show(); 
      return true; 
     } 
    }); 
}); 

此外,你需要插入其他功能,如$("#withdraw").show();else語句中。

JSFiddle Demo

+0

下面看到正確的方法它不會工作,仍然繼續下一步 –

+0

@ronilitman,因爲你需要把其他顯示,隱藏在else語句中的函數 – imbondbaby

+0

@ronilitman檢查更新 – imbondbaby

0

試試這個:

<script> 
     $(".inventoryInput").each(function(){ 
      var el = $(this) 
      $("#inventoryForm").on("submit", function (event) { 
      if(el.val() < 0) { 

       $("#inventoryError").slideDown().text("blablabla"); 
       return false; 
     } 

    }) 
}); 

+0

仍然不會工作..你可以把它在我的小提琴嗎? –

0

嘗試一個隱藏的校驗功能:

window.verify = function() { 
 
    var valid = true; 
 
    $('input').each(function() { 
 
    if ($(this).val() == "" || $(this).val() < 0) { 
 
     valid = false; 
 
    } 
 
    }); 
 
    if (valid) { 
 
    $('#submit').click(); 
 
    } else { 
 
    alert("Please complete all fields."); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form id="inventoryForm"> 
 
    <input type="text" placeholder="Product Id" name="prod_id" id="prod_id" /> 
 
    <input type="number" placeholder="Quantity" name="quantity" id="quantity" /> 
 
    <button type="button" onclick="verify()">Submit</button> 
 
    <button id="submit" type="submit" style="display:none"></button> 
 
</form>

0

您可以使用filter函數僅返回與您的條件不匹配的元素。

var hasErrorElements = $('.inventoryInput').filter(function() { 
    return parseInt($(this).val()) < 0; 
}).length > 0; 

if (hasErrorElements) { 
    alert('Error!'); 
    event.preventDefault(); 
    return false; 
} 
相關問題