1

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

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

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

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

更新:即使我从多选表单字段中删除了 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" });
...
});

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

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

2 回答 2

0
<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
   }
于 2013-03-13T18:30:10.230 回答
0

我会将其添加为评论,但我还没有代表。尽管如此,我在使用 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 %>

希望这可以帮助某人。或者更好的是,导致修复。

于 2013-03-28T23:08:17.137 回答