1

好的 不久前,我发现了一个很棒的 jQuery 小插件样式脚本,它将获取表单中的所有字段并将它们序列化为 JSON 对象。然而不幸的是。我发现如果没有另外提供,这个函数将使用占位符文本。如果占位符文本是那里的文本,我宁愿将其设置为空。

有什么想法可以将其添加到这个小片段中吗?

(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

您可以修改您的 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 回答
0

如果您指的是 HTML 中的占位符属性,我相当肯定占位符属性公开为 .placeholder 而不是 .value。

您是使用占位符属性还是使用脚本将占位符换入和换出值?

于 2012-11-13T00:37:57.817 回答