2010-06-03 47 views
1

我可能会对此都错了,但这里统计的元素就是我想要做的事:重写表单提交基于与jquery.each

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

我有点困了,我不熟悉jQuery总体,但我想覆盖$(“form”)。提交,这是我在做什么。任何意见或建议,不胜感激。

$("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; 
    } 
}); 

回答

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

只是一个想法,我有我的最后一篇文章后。它可能需要一些改进。希望这不是一次彻底的失败,对于你想要做的事情是可能的。祝你好运!

0

似乎大多是好的。您可以$('.sportsCoachedValidation').each(function() {下与

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

+0

这是在正确的轨道上,但不过滤任何标记为“N/A”的项目被选中的情况,并且不应该被计数... – Funka 2010-06-03 05:19:39

1

多少实际的投入与类sportsCoachedValidation更换整个第一部分......有没有在网页上?

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

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

我所做的是稍微改变外部分回报,你一组的整个形式的所有选择的选项。内部部分现在使用this来引用当前选中的选项,通过jquery“each”循环。您的版本在重新选择时会产生的影响,但不会利用您尝试循环播放的内容。

祝你好运!

+0

另外一个建议:放一个'var sportsSelected = 0 ;'作为函数的第一部分。那么在故障条件下,您不需要将其重置为零,并且可以放心,它总是可以正确复位。 – Funka 2010-06-03 05:13:53