jQuery将表单序列化为JSON对象但忽略占位符

时间:2012-11-13 00:30:04

标签: javascript jquery forms serialization

Ok一段时间后,我发现了jQuery的这个精彩的小插件样式脚本,它将获取表单中的所有字段并将它们序列化为JSON对象。但不幸的是。我发现如果没有提供占位符文本,此函数将使用占位符文本。如果是占位符文本的情况,那么我宁愿将其设置为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在抓取输入时将其视为实际值。所以我得到一个名字字段(可选)的条目作为“名字”。所以我想要的是弄清楚如何比较上面的剪辑所在的当前字段,并让它看到该字段的当前占位符(如果有的话,选择不具有该属性)。如果提取的值与占位符属性匹配,我想将该字段添加到正在创建的对象,但是将其作为null而不是占位符文本

3 个答案:

答案 0 :(得分:2)

为什么不在序列化之前清除占位符?

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

请参阅此示例:http://jsfiddle.net/WjEK9/

答案 1 :(得分:0)

您可以修改DOCTYPE以允许输入标记上的自定义属性(如果您关心标准)(或者只是调用teh属性“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.
}

答案 2 :(得分:0)

如果你在HTML中引用占位符属性,我很确定占位符属性是公开的.placeholder而不是.value。

您是使用占位符属性还是使用脚本将占位符交换为值?