2017-11-07 5 views
4

私はオプションボックスを持っています。入力をシリアライズしないようにする

<form class="i-hate-u"> 
    <select class="helloMoto" name="helloMoto"> 
     <option value="">Select...</option> 
     <option value="-1">Other</option> 
    </select> 
</form> 

エンドユーザーは、「その他」のオプションを選択すると、テキスト入力は次のように表示されます。

$('.helloMoto').on('change', function() { 
     if ($(this).val() == '-1') 
      $(this).hide(); 
      var input_name = $(this).attr('name'); 
      var input = '<div class="input-group">' + 
          '<input type="text" class="form-control" name="'+input_name+'" placeholder="Type other.">' + 
           '<span class="input-group-btn">' + 
            '<button class="btn btn-primary" onclick="removeSelectOther(this);"><i class="la la-close"></i></button>' + 
           '</span>' + 
         '</div>'; 

      $(this).parent().append(input); 
}); 

このの終わりには、エンドユーザーが保存ボタンをクリックしたときに、私は、フォーム全体をシリアライズ

var data = $('.i-hate-u').serialize(); 

このように、ユーザーが他のオプションを選択した場合、入力は同じ名前で表示されます。ユーザーが他のオプションを選択した場合は削除したいシリアライズされた値が同じ名前を持つ場合、最初の1つまたは-1をスキップする方法はありますか?

+0

イベントハンドラでは、 'name'属性を' select'から削除します。選択肢が-1の場合は、それを元に戻します。 –

+0

@MatJ私はその方法を見つけましたが、すべてのブラウザで動作しますか?シリアライズメソッドでは、すべてのブラウザで名前のない入力が表示されませんか? – Nevermore

+0

はい、それが見えても、どのキーを使うべきかはわかりません。すべての場合、サーバはキー 'helloMoto'の正しい値を見るでしょう –

答えて

1

helloMotoためvalue-1 YESである場合、その後(フォームに提出)のような<select>を無効にした場合だけでシリアライズする前に、確認してください。代わりにあなただけのシリアル化しながら、helloMotoを除外、試すことができます

if($('select[name="helloMoto"]').val() == -1) 
{ 
    $('select[name="helloMoto"]').attr('disabled', true); 
} 

if($('select[name="helloMoto"]').val() == -1) 
{ 
    var data = $('input[name!=security]', $('.i-hate-u')).serialize(); 
}else 
{ 
    var data = $('.i-hate-u').serialize(); 
} 
関連する問題