屏幕上显示隐藏元素时重新运行功能

时间:2017-10-27 07:39:55

标签: javascript jquery html forms filter

  • 我有一个函数可以检查我的所有表单字段是否都已填满 在,如果他们有它删除我提交的禁用属性 按钮,允许用户提交。
  • 这很完美,但是,我有一个只出现的字段 在页面的其中一个下拉列表中选择某个元素, 当这个元素出现时,我就像这样添加validate类:

    if (job.value === "OTHER") {
        $('#inputOtherJobFunction').parent().show();
        $('#inputOtherJobFunction').addClass('validate');
    } else {
        $('#inputOtherJobFunction').removeClass('validate);
    }
    

然后我在我的函数中再次分配$ fieldsToCheck变量,因此它现在在屏幕上包含新的表单元素。

屏幕上出现这个新元素后,当我点击另一个输入框并输入内容时,禁用的按钮才会激活。

我想我每次在表单上输入任何内容时都需要触发此功能,但我不太确定。

let $registerButton = $('.create-account-button');
let $fieldsToCheck = $('.registration-form .validate');

let checkFields = function () {
    $fieldsToCheck = $('.registration-form .validate');
    console.log('being called');
    let emptyFields = $fieldsToCheck.map(function () {
        return this.value;
    }).get().filter(function (val) {
        return val.length === 0;
    });
    $registerButton.prop('disabled', !!emptyFields.length);
};

$fieldsToCheck.blur(checkFields);
checkFields();

1 个答案:

答案 0 :(得分:1)

试过了吗?

if (job.value === "OTHER") {
            $('#inputOtherJobFunction').parent().show();
            $('#inputOtherJobFunction').addClass('validate');

            checkFields();
        } else {
            $('#inputOtherJobFunction').removeClass('validate);
        }

编辑: 通过评论了解您的需求我会尝试将该方法附加到相关事件中。

$fieldsToCheck.on('focus blur change', checkFields);

您的情况可能只需要focusblur