javascript - jQuery:如何将表单元素上的事件监听器范围限制到它们自己的表单?

标签 javascript jquery

所以我在一个页面上有多个表单。除了可能包含的数据之外,每个表单都是相同的。我正在监听对特定元素的更改,这些更改应该修改同一表单中的其他元素,但我无法弄清楚如何在其自己的表单中确定这些操作的范围。这是我到目前为止所得到的:

var ContactSponsor = new function(){

    this.init = function(){
        $('#SponsorStatus_ID').change(SponsorStatusChanged);
    };

    var SponsorStatusChanged = function(){

        var $form = $(this).closest('form');
        var selectedValue = $(this).find('option:selected').text();

        if (selectedValue == 'Executed Contract') {
            markFieldRequired('#NumVAPs', $form);
            markFieldRequired('#SponsorWebsiteLevel_ID', $form);
            autoFillFieldWithCurrentDate('#ContractDate', $form);
        } else {
            markFieldNotRequired('#NumVAPs', $form);
            markFieldNotRequired('#SponsorWebsiteLevel_ID', $form);
        }
    };

    var markFieldRequired = function(fieldID, $form){
        $(fieldID, $form).siblings('label').addClass('required');
    };

    var markFieldNotRequired = function(fieldID, $form){
        $(fieldID, $form).siblings('label').removeClass('required');
    };

    var autoFillFieldWithCurrentDate = function(fieldID, $form){
        if ($(fieldID, $form).val() == '' || $(fieldID, $form).val() == '0000-00-00') {
            $(fieldID, $form).val(getCurrentDate());
        }
    };
};

此外,我还将表单传递给每个方法。不确定是否有一种方法可以做到这一点,而无需每次都传递它。

最佳答案

您似乎使用了重复的 ID。这可能会引起问题。不要让每个 FORM 包含带有 id=NumVAPs 的输入,而是删除 ID,然后按名称定位字段,例如$form.find('[name=NumVAPs]')

嘿,当我们这样做时,您可能希望将 markFieldRequiredmarkFieldNotRequired 函数合并到一个接受的 setFieldRequired 中一个 bool 值,指示该字段是否为必填字段。

此外,如果将字段标记为必填纯粹是装饰性的,您可能需要考虑使用一些 CSS 来处理它。例如:

var SponsorStatusChanged = function(){
    var $this = $(this);

    if($this.val() == 'Executed Contract') {
        $this.closest('form').addClass('executed');
    }
}

然后,添加此 CSS:

form.executed label.required-for-executed {
    /* whatever rules are conferred by .required */
}

或者将该选择器添加到 .required block 中。此外,您还必须将类 required-for-executed 添加到标记中的每个相应标签中(即不要使用 javascript 执行此操作)。

关于javascript - jQuery:如何将表单元素上的事件监听器范围限制到它们自己的表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6962929/

相关文章:

jquery - 使用 AngularJS 拖放(带或不带 jQuery),怎么样?

javascript - 跳过 Node.js JavaScript 片段中的代码

javascript - 如何创建编辑按钮在 CRUD 中正常工作?

javascript - 数据表和 JQuery 在 IE8 中损坏

javascript - 通过在数组中输入其他值从 json 数据中获取其他值

jquery - jquery中的mousedown/mouseup适用于ipad吗?

javascript - Fullcalendar (Arshaw) - 添加带有模式窗口的事件

javascript - 如何取出显示在url中的div? - 添加了 JS fiddle

jquery - 父容器在响应式 jQuery slider 中折叠

jquery - 将一组复选框的选中状态复制到另一个字段集