1

クライアント側のフォーム検証にLiveValidationを使用しています。http://livevalidation.com/examples

Select2が適用された複数選択フォーム フィールドもあります。

問題は、そのSelect2フィールドを空のままにしておくと (何も選択しない)、[送信] ボタンを押した後にフォームが他のフォーム フィールドを検証せずに送信されることです。

しかし、Select2 フィールドで何かを選択してフォームを送信しようとすると、LiveValidationはフォーム内の他のフィールド (Select2 フィールドを含む) を検証しようとしそれら検証に失敗すると、フォームは送信されず、ユーザーに確認を求めます。最初にエラーを修正します。

更新:複数選択フォーム フィールドから Select2 を削除しても、LiveValidation は空のままにするか、何も選択しないと検証をスキップします。


Select2が適用された選択フィールド(選択のオプションに、PHP 関数 getSelectOptions を使用して、テーブル内の 1 つの列の行の値を入力します):

<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 に答える