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
而不是占位符文本
答案 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。
您是使用占位符属性还是使用脚本将占位符交换为值?