【问题标题】:Disabling a submit button if a given field is unfilled in jQuery如果 jQuery 中未填写给定字段,则禁用提交按钮
【发布时间】:2015-02-17 21:10:55
【问题描述】:

我目前正在使用 jQuery 禁用编辑配置文件部分上的提交按钮,除非使用以下 jQuery 填写密码字段。

$('.submitBtn').prop('disabled', true);
$('.requiredInput').keyup(function() {
    checkRequiredFields();
});
function checkRequiredFields() {
    var count = 0;
    $('.requiredInput').each(function(i){
        if( $(this).val() === '')  count++;
        if(count == 0){
            $('.submitBtn').prop('disabled', false);
        }else {
            $('.submitBtn').prop('disabled', true);
        }
    });
}

我也有弹出模式对话框以显示更改密码部分,我想禁用提交按钮,直到以类似方式将数据输入到表单中。

如果我想在一个字段为空时禁用一个按钮,而在另一个字段为空时禁用另一个按钮,我该如何实现?

根据要求提供 HTML:

     <div class='form-group'>
    <div class='row'>
      <div class='col-sm-6'>
        <label for="user_current_password">Current password</label>
        <input class="form-control requiredInput_1" id="user_current_password" name="user[current_password]" type="password" />
      </div>
    </div>
  </div>
  <div class='row'>
    <div class='col-sm-6'>
      <input class="btn btn-success submitBtn_1" name="commit" type="submit" value="Save" />
      <a class="btn btn-default" href="/">Cancel</a>
      <div class='btn btn-warning' data-target='#edit-password' data-toggle='modal' style='float:right;'>Change password</div>
    </div>
  </div>
 </div> 

和模态对话框中的第二种形式相同。

【问题讨论】:

  • where for example i set submitBtn_1 and submitBtn_2 in the html and loop through these 是什么意思?
  • 为了清楚起见,我已经更新了问题。

标签: jquery forms modal-dialog


【解决方案1】:

看看这个:

$("input").on('keyup', function(){
    $(this).next().prop('disabled', $(this).val()=="");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input /> <button disabled>ok</button><br>
<input /> <button disabled>ok</button><br>
<input /> <button disabled>ok</button><br>
<input /> <button disabled>ok</button><br>
<input /> <button disabled>ok</button><br>
<input /> <button disabled>ok</button><br>
<input /> <button disabled>ok</button><br>
<input /> <button disabled>ok</button><br>
<input /> <button disabled>ok</button><br>

编辑

如果输入和按钮完全分开(在不同的 div 中等),您必须设置一个小技巧来在它们之间建立连接:

$('input').on('keyup', function(e){
  var target = e.currentTarget.attributes['data-btn'].value; // will give you "btn1" or "btn2"
    
  $("#"+target).prop('disabled', $(this).val()=='');
    
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
      <div>
          <div>
              <input data-btn="btn1"/>
          </div>
          <br>
           <div>
              <input data-btn="btn2"/>
          </div>
    </div>
    
    <p>
              <input data-btn="btn3"/>
     </p>
    
    <div>
        <button id="btn1" disabled>BUTTON 1</button>
        <button id="btn2" disabled>BUTTON 2</button>
        <div>
            <button id="btn3" disabled>BUTTON 3</button>
        </div>
    </div>      
</div>

【讨论】:

  • 这真的很酷,虽然我不确定如何将它合并到我的代码中,因为我正在使用 Rails 引导程序表单 (f.submit)。查看我添加的 html
  • 嗯,这绝对不是 HTML。发布实际的、构建的 HTML 而不是这个......预处理器(?)语言
  • 我已经用更严格的解决方案更新了我的答案,在输入和按钮之间绑定了它们在 DOM 中的位置。
【解决方案2】:

更好的功能是

$('.requiredInput_1').keyup(function() {
   checkFun(this, ".submitBtn_1");
});

$('.requiredInput_2').keyup(function() {
   checkFun(this, ".submitBtn_2");
});

function checkFun(a, b)
{
        var subBut = $(b);
        $(a).val()==""?subBut.prop('disabled', true):subBut.prop('disabled', false);
}

【讨论】:

  • subBut.prop('disabled', $(this).val()=="" ) :)
  • 谢谢,确实更干净了。如果我想在一个字段为空时禁用一个按钮,而在另一个字段为空时禁用另一个按钮,我该如何实现?
  • 查看更新后的代码。请张贴您的表格html,以便.submitBtn_1.submitBtn_2 也可以自动计算
  • 如果它解决了您的问题,请考虑投票并将其标记为正确答案。
  • 理想情况下,我正在寻找一种通用的方法来执行此操作,例如,我想要为 10 个字段和按钮进行成像,但我不想创建 10 个键控功能。
猜你喜欢
  • 2023-04-01
  • 2020-09-15
  • 2014-07-25
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多