如果至少一个字段具有填充值,则启用提交按钮

时间:2020-01-06 07:14:06

标签: javascript jquery

很抱歉,这可能是重复的Q,但无法轻松找到直接的解决方案,

我已经通过SO答案找到了,如果所有值都已填充,请启用$(document).ready(function() { $('.field input').keyup(function() { var empty = false; $('.field input').each(function() { if ($(this).val().length == 0) { empty = true; } }); if (empty) { $('.actions input').attr('disabled', 'disabled'); } else { $('.actions input').attr('disabled', false); } }); });

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='form'>
  <form>
    <div class='field'>
      <label for="username">Username</label>
      <input id="username" type="text" />
    </div>
    <div class='field'>
      <label for="password">Password</label>
      <input id="password" type="password" />
    </div>
    <div class='actions'>
      <input type="submit" value="Login" disabled="disabled" />
    </div>
  </form>
</div>
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)

training_set = train_datagen.flow_from_directory('D:\\Datasets\\gender CK+\\training_set',
target_size = (64, 64), batch_size = 32, class_mode = 'categorical')

test_set = test_datagen.flow_from_directory('D:\\Datasets\\gender CK+\\test_set',
target_size = (64, 64), batch_size = 32, class_mode = 'categorical')

seq = Sequential()
seq.add(ConvLSTM2D(filters=32, kernel_size=(3, 3),input_shape=(None, 64, 64, 40),
    padding='same', return_sequences=True))seq.add(Batch Normalization())
seq.add(Dense(2,activation="sigmoid"))
seq.compile(loss='binary_crossentropy', optimizer='rmsprop',metrics=['accuracy'])
seq.summary()
seq.fit_generator(training_set, steps_per_epoch = 100, epochs = 4, validation_data = test_set, validation_steps = 200)

但是如果至少一个字段为非空,如何实现相同的(启用提交)

5 个答案:

答案 0 :(得分:4)

您可以尝试以下方法:

$(document).ready(function() {
    $('.field input').keyup(function() {
        var hasValue = $('#username,#password').filter((index, input) => input.value.length > 0).length;
    
        $('.actions input').attr('disabled', hasValue ? false : 'disabled');
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='form'>
  <form>
    <div class='field'>
      <label for="username">Username</label>
      <input id="username" type="text" />
    </div>
    <div class='field'>
      <label for="password">Password</label>
      <input id="password" type="password" />
    </div>
    <div class='actions'>
      <input type="submit" value="Login" disabled="disabled" />
    </div>
  </form>
</div>


更新:

$('#username,#password').filter((index, input) => input.value.length > 0).length

此行意味着我们将检查2个输入元素usernamepassword的值,如果所有输入元素都不具有任何值,则该按钮将被禁用。如果要在启用/禁用之前检查另一个输入元素,则可以添加:

$('#username,#password,#input_3,#input_4').filter(...).length

这样,当usernamepasswordinput_3input_4元素没有任何值时,该按钮将被禁用。确保每个输入元素都有一个特定的ID。


更新2:

同时检查usernamepassword有一些价值:

var hasValue = $('#username,#password').filter((index, input) => input.value.length > 0).length === 2

检查fieldfield4field5有一些价值:

var hasValue = $('#field,#field4,#field5').filter((index, input) => input.value.length > 0).length === 3

答案 1 :(得分:1)

您可以选择Jquery.mapArray.find

  1. Jquery.map().get()获得所有带条件的输入值长度。
  2. Array.find将找到输入中的任意一个作为字符串的有效长度
  3. 然后最后将结果反向比较prop('disabled', !filled)

$(document).ready(function() {
  $('.field input').keyup(function() {
    var res = $('.field input').map(function() {
        return $(this).val().length != 0
    }).get()
    var filled  = res.find(a=> a == true)
    $('.actions input').prop('disabled', !filled);
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='form'>
  <form>
    <div class='field'>
      <label for="username">Username</label>
      <input id="username" type="text" />
    </div>
    <div class='field'>
      <label for="password">Password</label>
      <input id="password" type="password" />
    </div>
    <div class='actions'>
      <input type="submit" value="Login" disabled="disabled" />
    </div>
  </form>
</div>

使用选择选项更新

基于必填字段的按钮。只有在必填字段1和3都填写后才启用按钮

$(document).ready(function() {
  $('.field input,.field select').on('keyup change',function() {
    var res = $('.field input[required],.field select[required]').map(function() {
      return $(this).val().trim().length != 0
    }).get();
    var filled = res.every(a => a == true)
    $('.actions input').prop('disabled', !filled);
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='form'>
  <form>
    <div class='field'>
      <label for="username">Username *</label>
      <input id="username" required type="text" />
    </div>
    <div class='field'>
      <label for="password">Password</label>
      <input id="password" type="password" />
    </div>
    <div class='field'>
      <label for="password">email *</label>
      <input id="password" required type="password" />
    </div>
    <div class='field'>
      <label for="password">select email *</label>
      <select required>
        <option value="">Select</option>
        <option value="1">one</option>
        <option value="2">two</option>
      </select>
    </div>
    <div class='actions'>
      <input type="submit" value="Login" disabled="disabled" />
    </div>
  </form>
</div>

答案 2 :(得分:1)

使用jQuery props方法。

$(document).ready(function() {
     $(':input[type="submit"]').prop('disabled', true);
     $('input').keyup(function() {
        if($(this).val() != '') {
           $(':input[type="submit"]').prop('disabled', false);
        }else{
          $(':input[type="submit"]').prop('disabled', true);
        }
     });
 });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='form'>
  <form>
    <div class='field'>
      <label for="username">Username</label>
      <input id="username" type="text" />
    </div>
    <div class='field'>
      <label for="password">Password</label>
      <input id="password" type="password" />
    </div>
    <div class='actions'>
      <input type="submit" value="Login" disabled="disabled" />
    </div>
  </form>
</div>

答案 3 :(得分:1)

另一种解决方法:

存储字段,并在每次按键时创建一个新的字段集合,并按其值过滤每个字段。

如果我们空白字段的长度与所有字段的长度相同,请禁用该按钮:

from itertools import permutations 

perm = permutations([1,2,3,4,5,6,7,8,9,0,'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'], 3) 

for i in list(perm): 
    print (i) 
$(document).ready(function() {
    var $fields = $('.field input');
    
    $fields.keyup(function() {

        var $emptyFields = $fields.filter(function(){
            return !this.value;
        });
        
        $('.actions input').prop('disabled', $emptyFields.length === $fields.length);
    });
});

文档:

答案 4 :(得分:0)

您可以通过一种简单的方法尝试此操作,如下所示:

var filled = false;
$('.field input').each(function() {
            if ($(this).val().length > 0) {
                filled = true;
                return;     // just add return means break from loop whenever any field is filled. 
            }
        });

        if (filled) {
            $('.actions input').attr('disabled', false);
        } else {
            $('.actions input').attr('disabled', 'disabled');
        }
    });
相关问题