【问题标题】:LiveValidation submits form without validating other fields if Select2 field is empty如果 Select2 字段为空,LiveValidation 提交表单而不验证其他字段
【发布时间】:2026-02-18 10:55:02
【问题描述】:

我正在使用 LiveValidation 进行客户端表单验证。 http://livevalidation.com/examples

我还有一个应用了 Select2 的多选表单字段。

问题是,如果我将该 Select2 字段留空(不选择任何内容),那么我的表单将在按下提交按钮后自行提交,而不验证任何其他表单字段。

但如果我确实在 Select2 字段中选择了某些内容并尝试提交表单,那么 LiveValidation 将尝试验证其他字段(包括 Select2 field),如果验证失败 - 表单不会提交并提示用户先修复错误。

更新:即使我从多选表单字段中删除 Select2,LiveValidation 仍会在它为空/未选择任何内容时跳过验证。


应用了 Select2 的选择字段(我使用 PHP 函数 getSelectOptions 使用表中单个列中的行值填充选择的选项):

<form id="myform" name="myform" method="post" action="myscript.php">
...
<select id="myselect" name="myselect[]" multiple="multiple">
    <?php getSelectOptions("table_name", "column_name"); ?>
</select>
...
</form>

以下是我如何将 Select2 应用于文件前面的选择字段:

$(function()
{
...
$('#myselect').select2({ placeholder: "Select items" });
...
});

在这里,我将 LiveValidation 应用于 Select2 之后的选择字段(通过添加 Validate.Presence 我告诉它选择字段不能为空/必须有值):

$(function()
{
...
var myselect = new LiveValidation("myselect", { onlyOnSubmit: true });          
myselect.add(Validate.Presence);
...
});

【问题讨论】:

    标签: javascript jquery html validation jquery-select2


    【解决方案1】:
    <input type="text" value="Your Name" name="name" onblur="if (this.value == '') {this.value        = 'Your Name';}"  onfocus="if (this.value == 'Your Name') {this.value = '';}" />
    

    用适合您情况的内容替换“您的姓名”。如果用户未填写此字段,它将恢复为该值并失败

    哦,我误解了,所以要澄清而不是使用 onlyonSubmite:true...会添加一个 ifelse 工作。

     if(!myselect) {
          throw error
      else { 
        //do what you need
       }
    

    【讨论】:

    • 我不确定你的意思。
    • 我的文本输入工作正常。 &lt;select&gt; 留空时无法正确验证。
    【解决方案2】:

    我会将此添加为评论,但我还没有代表。尽管如此,我在使用 Ruby On Rails 的 select2 时遇到了完全相同的问题:即,如果该字段为空(在我的情况下也是多选),则跳过其他验证,两个客户端(我正在使用客户端验证)和服务器端(AJAX 响应)。

    但是,与您的情况一样,如果 select2 字段中有选择,则所有其他验证都会正常触发。

    我的(丑陋的)解决方法是在创建操作服务器端挑选空的 select2 字段,并通过 AJAX 将错误返回到模态(我的表单所在的位置)。这至少避免了我在控制台中遇到的讨厌的 500 错误。为了完整起见,以及在 ROR 领域遇到此问题的任何其他人,黑客代码如下所示:

     def create
      # messaged is params definition of field contents
      if messaged.blank?
       #create a dummy message instance
        @message = Message.new
       #add error and call the whole thing off
        @message.errors.add(:base, "No recipients selected.")
        return
      end
      #rest of the normal action...
     end
    

    这是模态 JS:

    var el = $('#new-message-form');
    
    <% if @message.errors.any? %>
    
      // Create a list of errors
      var errors = $('<ul />');
    
      <% @message.errors.full_messages.each do |error| %>
        errors.append('<li><%= escape_javascript( error ) %></li>');
      <% end %>
    
      // Display errors on form
    
      $('.modalerrors').html(errors).show('slideDown');
      $('.modalerrors').delay(5000).hide('slideUp');
    
    
    
    <% else %>
    
        $('#messageModal').modal('hide');
    
        // hide then Clear form and reload page
    
        $('#messageModal').on('hidden', function () {
            el.find('input:text,textarea').val('');
            el.find('.modalerrors').empty();
           <% @message = "" %>
            location.reload();
        });
    <% end %>
    

    希望这对某人有所帮助。或者更好的是,导致修复。

    【讨论】: