【问题标题】:Rerun function when hidden element is displayed on screen当隐藏元素显示在屏幕上时重新运行功能
【发布时间】:2018-04-08 18:05:40
【问题描述】:
  • 我有一个功能可以检查我的所有表单字段是否都已填写 在,如果他们有它删除我提交的禁用属性 按钮并允许用户提交。
  • 这很好用,但是,我有一个字段,只有在 在页面上的下拉列表之一中选择了某些元素, 当这个元素出现时,我像这样添加验证类:

    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();

【问题讨论】:

  • 当您需要时,只需再次致电checkFields();

标签: javascript jquery html forms filter


【解决方案1】:

试过了吗?

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

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

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

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

您的案例可能只需要focusblur

【讨论】:

  • 我试过这个,我认为它更多的是 $fieldsToCheck.blur,我认为可能使用模糊是错误的,但我不确定
  • 它适用于所有情况,除非我在下拉菜单中选择为我提供新字段的元素,如果我清除出现的文本框,我必须单击另一个输入框,直到按钮没有被禁用,我可以在 .on() 中添加更多内容吗?
  • @NickPocock 基本上每个输入事件,比如keypresskeyup。尽管在您的情况下,听起来您需要在选择框上附加change 事件侦听器并在回调中执行您想要的操作(即调用checkFields())。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
相关资源
最近更新 更多