【问题标题】:.submit() not working with other jQuery function?.submit() 不能与其他 jQuery 函数一起使用?
【发布时间】:2014-02-20 20:12:31
【问题描述】:

这是一个相当基本的调查表;我正在使用 JQuery 根据用户选择有条件地显示/隐藏字段。

//FORM CONDITIONALS Hides all the helpfulness radios and only shows them when "Yes" for a particular question is checked
$("#datainp .occurrence").click(function () {
    var nexttd = $(this).next('td');
    if ($(this).children("input:first").is(':checked')) {
        $(nexttd).show();
        $(nexttd).children("input").removeAttr("checked");
    } else {
        $(nexttd).hide();
    }

我也有一个客户端验证功能:。

//Client side validation and submissions
$('#submit').click(function(e) {

    e.preventDefault();

    var level = $('#Level').val();
    var schoolid = $('#school').val();

    if (!schoolid) {
        alert("Please select a school!");
        return;
    }
    if (!level) {
        alert("Please select a grade level!");
        return;
    }
    alert("foo");
    $('#frmTeacherEvalGuidance').submit(function() {alert("bar") });

});

除了验证结束时的 .submit() 之外,一切正常(警报验证)。 我的表单条件部分中的某些内容是否与 .submit() 冲突?当我注释掉 javascript 的第一部分时,表单会按预期提交。 JsFiddle 在这里:http://jsfiddle.net/r4Y4g/1/(我知道 html 有点笨拙,但不是我的;更新一个旧的团队项目)

【问题讨论】:

    标签: javascript jquery html dom


    【解决方案1】:

    你应该使用 .stopPropagation() 而不是 .preventDefault()

    试试这个:

    //Client side validation and submissions
        $('#submit').click(function(e) {
    
            e.stopPropagation();
    
            var level = $('#Level').val();
            var schoolid = $('#school').val();
    
            if (!schoolid) {
                alert("Please select a school!");
                return false;
            }
            if (!level) {
                alert("Please select a grade level!");
                return false;
            }
    
            return true;   
        });
    

    【讨论】:

    • 'foo' 警报触发,但仍然没有提交表单
    • 我已经编辑了我的答案。现在我明白你所说的了。 jsfiddle.net/r4Y4g/1
    • @ChrisWillard 看看。 ;)
    • 这行得通。谢谢雷纳托!但是知道为什么 .submit() 行为不端吗? stopPropogation() 与 preventDefault() 有何不同?
    • .submit 将“提交”事件的侦听器放入表单但不触发它。
    【解决方案2】:

    你可以添加一个监听器:

    $("#frmTeacherEvalGuidance").on("submit", function () {
       alert("bar"); 
    });
    

    【讨论】:

    • 刚刚尝试按照建议将函数重写为提交时的侦听器,但这意味着 1) 我失去了验证的能力(即,无论我的 if 语句如何,它都会提交);或 2) 如果我使用 preventDefault 我仍然必须在验证后使用 .submit() 。无论哪种情况,我仍然没有我需要的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多