2010-06-03 80 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