【问题标题】:Using Jquery to Disable Submit Button if an option is selected如果选择了选项,则使用 Jquery 禁用提交按钮
【发布时间】:2010-12-01 16:42:04
【问题描述】:

我有一个包含四个选择字段的简单表单。如果在任何表单字段上选择了“是”,则需要禁用提交按钮,并且应该会出现一个隐藏的 div。这是我的标记示例:

<form>
I have read the information on the product(s)<select name="field4"> <option value="Yes">Yes</option> <option value="No">No</option> </select>

Do you have any allergies to any ingredients in product(s)?
 <select name="field5"><option value="Yes">Yes</option> <option value="No">No</option> </select>

Are you pregnant?
 <select name="field6"> <option value="Yes">Yes</option> <option value="No">No</option> </select>

Have you ever used this type of product and had undesirable results?
 <select name="field7"> <option value="Yes">Yes</option> <option value="No">No</option> </select>

<input name="cmdSubmit" type="submit" value="Submit" />
</form>


<div style="display:none;">Hidden div only to appear if any of the four dropdowns are marked YES.</div>

感谢您对此的帮助。我是一个 jquery 新手,正在努力学习。

【问题讨论】:

  • 到目前为止您尝试过什么?我建议给所有选择框一个特定的类,这样选择会更容易。

标签: jquery forms field


【解决方案1】:

我不完全了解您构建表单的方式和您的要求的业务逻辑,但是...根据您在此处所说的内容进行操作。

  1. 编写函数来检查所有选项,更改禁用/启用提交,显示/隐藏 div
  2. 加载时调用函数
  3. 每次选项值更改时调用函数检查所有选项

.

checkOptions();
$("select").change(checkOptions);

function checkOptions() {
  var yesFound = false;
  $("select").each(function(index, element) {
    if ( $(element).val() == "Yes" ) {
      yesFound = true;
    }
  });

  if (yesFound) {
    $("#hidden-div").show();
    $("input[type=Submit]").attr("disabled","disabled");
  } else {
    $("#hidden-div").hide();
    $("input[type=Submit]").removeAttr("disabled");
  };
}

略加修改的 HTML:

<form>
  <select name="field4"> 
    <option value="Yes">Yes</option>
    <option value="No">No</option>
  </select> I have read the information on the product(s)<br/>
  <select name="field5">
    <option value="Yes">Yes</option>
    <option value="No">No</option>
  </select> Do you have any allergies to any ingredients in product(s)?<br/>
  <select name="field6">
    <option value="Yes">Yes</option>
    <option value="No">No</option>
  </select> Are you pregnant?<br/>
  <select name="field7">
    <option value="Yes">Yes</option>
    <option value="No">No</option>
  </select> Have you ever used this type of product and had undesirable results?<br/>
  <br/>
  <input name="cmdSubmit" type="submit" value="Submit" />
</form>
<div id="hidden-div" style="display:none;">Hidden div only to appear if any of the four dropdowns are marked YES.</div>

示例网页:

http://mikegrace.s3.amazonaws.com/forums/stack-overflow/example-disable-submit-dynamically.html

加载中:

所有选项“否”,只有一个:

所有选项“是”:

【讨论】:

  • 你的答案是我在 SO 上看到的最彻底的答案。这就像你在为他们做别人的工作! :-)
  • 谢谢 Mike,这正是我所需要的。
  • @Andrew,哈哈!谢谢!我尝试用一​​个工作示例来回答问题,因为有时看到完整的工作代码会有所不同。
【解决方案2】:

给你所有的选择(下拉菜单)一个类“foo”。给“是”选项一个“是”类。 $("select.foo option.yes:selected").empty() 表示“没有选择标记为“是”的下拉选项”

所以

$("select.foo").change(function() {
   if(!$("select.foo option.yes:selected").empty()) {
      /* Do something here, maybe use BlockUI JS library */
   }
});

【讨论】:

  • 当然你可能想找一个比“foo”更好的名字:)
  • 根据以上 buddhabrot 的回答,“将“是”的选项归类为“是”。”
  • 这是一个下拉菜单,不是复选框
  • 请注意,使用类作为选项意味着您不受“是”一词的约束,它可能被翻译成不同的语言。我建议不要像其他一些答案那样使用这样的文本。
【解决方案3】:
var selects = $('select').change(function(){ //on change of any select
    var hasYes = false;
    selects.each(function(){ // check all selects
        if($(this).val() == 'Yes') //for 'Yes'
            hasYes = true;
    });
    if(hasYes){ // show div disable submit
       $('input:submit').attr('disabled','disabled');
       $('div.hidden').show();
    }
    else{
        $('input:submit').removeAttr('disabled');
       $('div.hidden').hide(); // add class hidden to the div
    }
});

【讨论】:

    【解决方案4】:

    您可以将两个选择的类属性设置为类似“选择”的内容,如下所示:

    <select name="field5" class="choices"...
    
    <select name="field6" class="choices"...
    

    然后做这样的事情:

    $(function() {
      $(".choices").change(function() {
        var anyYeses = false;
        $(".choices").each(function() {
          if($(this).val() == "Yes") {
            anyYeses = true;
          }
        });
        if(anyYeses) {
          $("input[name=cmdSubmit]").attr('disabled', 'disabled'); //disables
        }
        else {
          $("input[name=cmdSubmit]").removeAttr('disabled'); //enables
        }
      });
    });
    

    【讨论】:

    • 这一次只适用于一个下拉菜单。如果他们回到否定状态怎么办?
    • @Josiah Ruddell,如果您更新所有选择元素的类属性,这将适用于所有人。请查看我的更新。
    • 但一次只有一个。如果他们在一个下拉列表中选择是,然后在另一个下拉列表中选择是,然后在第一个下拉列表中选择否。他们仍然有 1 个下拉菜单,但该按钮将被重新启用。
    • @Josiah Ruddell,试试这个改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    相关资源
    最近更新 更多