1

OK しばらく前に、フォーム内のすべてのフィールドを取得して JSON オブジェクトにシリアル化する、jQuery 用のこの素晴らしい小さなアドオン スタイル スクリプトを見つけました。残念ながらしかし。他に何も提供されていない場合、この関数はプレースホルダーテキストを使用することがわかりました。その場合、プレースホルダーのテキストがそこにあるテキストである場合は、null に設定することをお勧めします。

この小さなスニップにそれを追加する方法はありますか?

(function($) {
$.fn.serializeFormJSON = function() {

   var o = {};
   var a = this.serializeArray();
   $.each(a, function() {
       if (o[this.name]) {
           if (!o[this.name].push) {
               o[this.name] = [o[this.name]];
           }
           o[this.name].push(this.value || '');
       } else {
           o[this.name] = this.value || '';
       }
   });
   return o;
};
})(jQuery);

編集: つまり、プレースホルダー属性は次のようなものである可能性がありplaceholder="First name"、入力を取得するときに JavaScript がそれを実際の値として扱っているようです。そのため、名フィールド (オプション) のエントリを「名」として取得しています。したがって、私が望むのは、上記のスニップがオンになっている現在のフィールドを比較する方法を理解し、そのフィールドの現在のプレースホルダーを表示することです (selects のようなものがその属性を持っていない場合)。そして、プルされている値がプレースホルダー属性に一致する場合、そのフィールドを作成中のオブジェクトに追加したいのですがnull、プレースホルダーテキストの代わりに

4

3 に答える 3

2

シリアル化する前にプレースホルダーをクリアしてみませんか?

function clearPlaceHolders(){
 var form = document.GetElementById("formId");
 $(form).find("input").each(function(index,el){
  el.removeAttribute("placeholder");
 }
}

例については、http: //jsfiddle.net/WjEK9/を参照してください。

于 2012-11-13T00:37:14.090 に答える
0

HTML で placeholder 属性を参照している場合、placeholder 属性が .value ではなく .placeholder として公開されていることは確かです。

プレースホルダー属性を使用していますか、それともスクリプトを使用してプレースホルダーを値の内外に入れ替えていますか?

于 2012-11-13T00:37:57.817 に答える
0

DOCTYPE を変更して、入力タグのカスタム属性 (標準に関心がある場合) を許可することができます (または、単に属性「data-xxx」を「data-placeholderValue」と呼び、プレースホルダー値を値として追加し、「 placeholderValue" (たとえば) の場合、JS はvalue == placeholderValueそれを無視するかどうかを確認できます。

例:

HTML:

<input id="test" type="text" value="Please enter blah" placeholder="Please enter blah" />

JS:

var element=$('#test');
if(element.val == element.attr('placeholder')) {
  element.val(''); // Or however you want to express/capture this.
}
于 2012-11-13T00:35:51.197 に答える