0
if (standardFlag == "ASCE")
{
  if (document.querySelectorAll('#Ss_param, #S1_param, #T0_param, #TL_param').value == "" ){
    alert("Please fill out all the required fields before generating your design spectrum");
  }
  else if (document.getElementById('Ss_param').value < document.getElementById('S1_param').value {
    alert("S1 must be less than Ss!");
  }

我正在尝试检查 Ss_param、S1_param、T0_param 或 TL_param 输入 ID 是否包含任何值。第二个条件通过了它自己的情况,这就是我知道整个条件没有错误的方式,但是第一个条件在它应该通过的时候没有通过。我该如何纠正这个问题?

4

4 回答 4

2

首先也是最重要的:您应该只查看一个验证库。

如果您仍想以这种方式处理它,我会研究 jQuery 的filter方法。

这将仅返回具有值的元素:

var $elementsWithValue = $('#Ss_param, #S1_param, #T0_param, #TL_param').filter(function(){ 
    return this.value.length > 0 
});

然后你可以检查 $elementsWithValue 长度。

于 2013-05-28T19:55:17.297 回答
1

在重新格式化您的代码以使其更具可读性后,您似乎缺少一个右大括号},这是这个问题中的错字,还是您的代码中的错误?

此外,您的第二个条件缺少右括号)。当您在正在测试的浏览器中打开控制台时,您是否注意到 javascript 错误?

一旦你解决了这个问题,你需要知道你正在使用本机浏览器功能。使用时,querySelectorAll您会返回一组对象。调用.value它们也可能会导致 javascript 错误。您需要遍历每个值,或使用 jQuery(可以说这将为您提供更易于维护的解决方案)。

使用 jQuery,这将为您提供所需的结果:

if (standardFlag == "ASCE")
{
  var error = false;
  $.each(["Ss_param", "S1_param", "T0_param", "TL_param"], function(){
    if ($("#" + this).val() == ""){
      error = true;
      alert("Please fill out all the required fields before generating your design spectrum");
    }
  })

  if(!error && $("Ss_param").val() < $("#S1_param").val())
    alert("S1 must be less than Ss!");
  }
}
于 2013-05-28T19:41:42.107 回答
1

如果您的 id 始终以_param

if ($('[id$="_param"]').filter(function(){
     return $(this).val() === "";  
   }).length > 0){
alert("Please fill out all the required fields before generating your design spectrum");
}
于 2013-05-28T19:45:57.667 回答
1

您不能从多个元素中获得一个值。一次只比较一个:

if (document.getElementById('Ss_param').value === ""
    || document.getElementById('S1_param').value === ""
    || document.getElementById('T0_param').value === ""
    || document.getElementById('TL_param').value === "" ){

(并检查您的 JavaScript 控制台是否有语法错误。您的else if测试缺少右括号。)

于 2013-05-28T19:49:25.463 回答