使用jquery.each基于计数元素覆盖表单提交

时间:2010-06-03 03:26:20

标签: jquery forms each

我可能认为这一切都错了,但这就是我要做的事情:

我有一个表单,其中包含大约50个基于某些数据库信息动态生成的选择框。我无法控制文本框的ID,但我可以为每个文本框添加一个类。在提交表单之前,用户需要从选择框中选择至少一个项目,但不能超过四个。

我有点困,我总体上不熟悉jQuery,但我试图覆盖$(“形式”)。提交,这就是我正在做的事情。非常感谢任何建议或建议。

$("form").submit(function() {

    $('.sportsCoachedValidation').each(function() {
        if ($('.sportsCoachedValidation :selected').text() != 'N/A') {
            sportsSelected++
        }                    
    });

    if (sportsSelected >= 1 && sportsSelected <= 4) {
        return true;
    }
    else if (sportsSelected > 4) {
        alert('You can only coach up to four sports.');
        sportsSelected = 0;
        return false;
    }
    else {
        alert('Please select at least one coached sport.');
        sportsSelected = 0;
        return false;
    }
});

3 个答案:

答案 0 :(得分:1)

页面上有sportsCoachedValidation类的实际输入数量?

如果只有一个,你计算sportsSelected计数的内部部分将无法按预期工作......无论哪种方式,现在内部部分只会看到无论页面上有多少其他选择,第一个选择框中的第一个选择选项。考虑这样的事情:

$('.sportsCoachedValidation :selected').each(function() {
    if ($(this).text() != 'N/A') {
        sportsSelected++;
    }                    
});

我所做的是稍微更改了外部部分,在整个表单中返回一组所有选定的选项。内部部分现在使用this来引用当前选择的选项,该选项通过jquery“each”循环。您的版本在一些新标准上具有重新选择的效果,而不是使用您尝试循环的内容。

祝你好运!

答案 1 :(得分:1)

好的,这是另一种可能进一步简化这种方式的方法吗?

$("form").submit(function() {

    // How about avoiding the "each" loop, and just let jQuery count 'em up? (Not actually tested!)
    var sportsSelected = $('.sportsCoachedValidation :selected[value!="N/A"]').length;

    if (sportsSelected >= 1 && sportsSelected <= 4) {
        return true;
    }
    else if (sportsSelected > 4) {
        alert('You can only coach up to four sports.');
        return false;
    }
    else {
        alert('Please select at least one coached sport.');
        return false;
    }
});

我在上一篇文章后的想法。它可能需要一些改进。希望它不是一个彻底的失败,并且可能是你想要做的。祝你好运!

答案 2 :(得分:0)

似乎大多数没问题。您可以使用

替换$('.sportsCoachedValidation').each(function() {下的整个第一部分

var sportsSelected = $('.sportsCoachedValidation :selected').length;