2011-11-05 25 views
3

私は次の問題があります:jQuery serialize hidden(表示:なし)フォームelemensが機能しません。回避策?

私はシリアル化する必要がありますが、私は選択フィールドの外観を変更するためにJavaScriptを使用しています。つまり、実際の選択フィールドはdisplay:noneを使用して非表示になります。 私の問題は、jQueryが隠しセレクトを認識しますが、最初の値だけをシリアル化し、選択したものはシリアライズしないということです。

<select name="publish">
<option value="1">yes</option>
<option value="2" selected="selected">no</option>
</select>

jQuery.serialzie:= 1

を公開しますので、私に正しい値最初のとないを与えます。

回避策の候補はありますか?

ソリューション
さて、RobWで述べたように、最善の解決策は、単にJavaScriptがselectElement.selectedIndex = 5

私のソリューションを設定することで、必要なオプションを選択できるようにおそらく私はしかし、少し異なっていますメンテナンス上の問題(新しいバージョンをリリースするたびにスクリプトを変更する必要があるため)のために、私の選択の外観を変更するために使用されるプラグインを変更したくない。 私は、シリアライズのためにカスタム関数を使用しました。

(function($) { 
$.fn.serializer = function() { 
    var toReturn = []; 
    var elements   = $(this).find(':input').get(); 
    $.each(elements, function() { 
     if (this.name && !this.disabled && (this.checked || /select|textarea/i.test(this.nodeName) || /text|hidden|password/i.test(this.type))) 
     { 
      var val = $(this).val(); 
      // if is select, check selected 
      if(this.nodeName == "SELECT") 
      { 
       val = $(this).find('option:selected').val();  
      } 
      toReturn.push(encodeURIComponent(this.name) + "=" + encodeURIComponent(val)); 
     } 
    }); 
    return toReturn.join("&").replace(/%20/g, "+"); 
} 
})(jQuery); 

答えて

5

問題をシリアライズする前に隠された要素を、一時的なショーそれらによって引き起こされている場合:

var $form = $('#myForm'); 
var hidden = $form.find(':hidden'); // Select all hidden elements 
hidden.show();      // Show them 
var string = $form.serialize();  // Serialize form 
hidden.hide();      // Hide them again 

編集:それはあなたがselected=selected属性を設定することで、オプションを選択しようとしているようです。あなたが選択したオプションに変更するselectedIndexを使用する必要があります、うん良いアイデアを

var select = $("#myselect")[0]; //DOM element 
select.selectedIndex = 5;  //Example, select 6th option 
+0

を、私はそれを試してみましたが、問題は何か他のもののようです。私は通常のドロップダウンを使用して動作します。私はそれがあるかもしれないと思った、シリアライズは選択= "選択"が好きではない。それは可能ですか?私が使用するスクリプトは、選択されたドロップダウンフィールドを選択するように設定しているので、通常は選択のオプションを選択すると選択されません。それが問題だろうか?そしてどうやって止めるの? –

+0

どのようにオプションを選択していますか?最適な選択方法は、 'selectElement.selectedIndex = 5'(selectElementはDOM要素、5はオプションのインデックス)です。 –

+0

私はselected = "selected"に設定して選択していましたが、明らかに機能しません。しかし、私はあなたの作品を推測します。あなたが答えとしてそれを投稿できるなら、私はそれを確認することができます。ありがとう。 –

関連する問題