防止保存“占位符”
Preventing from saving "placeholder"
我有一个简单的HTML表单和输入:
<input placeholder="Default text" name="title" />
我有JS函数检查输入的值是否为空,如果是,它填充占位符的值(对于非Webkit浏览器)。现在我想防止保存占位符的值,所以我写了一个这样的函数:
$('form').each(function () {
$(this).submit(function (event) {
$(this).find('input').each(function () {
var default_value = $(this).attr("placeholder").replace(/'r/g, "");
if ($(this).attr("type") != "password" && $(this).attr("type") != "submit") {
if (default_value == $(this).val()) {
$(this).attr("name", "");
}
}
});
});
});
基本上是从输入中删除"name"属性。我添加了preventDefault()
,因为我不知道除了在我清除名称之前发送表单之外还有什么问题。我以为它会奏效,但不知何故,默认值仍然被保存。
注意:占位符支持Firefox 4+, Opera 11+, Chrome 3+和Safari 3+。Internet Explorer将在版本10中开始支持。因此,如果您正在编写一个脚本,请记住,您不必使用支持的用户代理。
如果该值等于默认值,您发布的代码将删除元素的name
属性。我不认为这是你的意思…如果该值等于默认值,您不希望将其清空吗?
if (default_value == $(this).val())
$(this).attr("name", "");
// should be...
if (default_value == $(this).val())
$(this).val('');
此外,有几个占位符shim脚本已经围绕jQuery…检查一下并考虑使用它,或者看看他们如何处理表单张贴并做笔记。这是其中之一。
编辑还有一些其他的问题在你的脚本,它是导致javascript错误和不完成。如果您正在使用Firebug进行调试,请尝试在控制台中打开"Persist"选项,以便在处理表单时保留请求之间的错误。
问题是,在检查元素的类型是否甚至具有占位符文本之前,您正在检查占位符文本。
$('form').each(function () {
$(this).submit(function (event) {
$(this).find('input').each(function () {
if ($(this).attr("type") != "password" && $(this).attr("type") != "submit") {
var default_value = (
$(this).attr("placeholder") ?
$(this).attr("placeholder").replace(/'r/g, "") :
false
);
if (default_value && default_value == $(this).val()) {
$(this).attr("name", "");
}
}
});
});
});
jsFiddle: http://jsfiddle.net/a8DQS/
编辑2
对于那些不使用jQuery的人,这是简单的javascript方式来做同样的事情OP的jQuery代码:
var forms = document.getElementsByTagName('form');
var frm_ct = forms.length;
for (var x = 0; x < frm_ct; x++) {
var handler = function (e) {
var elements = this.elements;
elmnt_ct = elements.length;
for (var y=0; y < elmnt_ct; y++) {
if (
elements[y].tagName == 'INPUT' && (
elements[y].type != 'password' &&
elements[y].type != 'submit'
)
) {
var default_value = (
elements[y].placeholder ?
elements[y].placeholder.replace(/'r/g, "") :
false
);
if (default_value && default_value == elements[y].value)
elements[y].value = '';
}
}
}
if (forms[x].addEventListener)
forms[x].addEventListener('submit', handler, false);
else
forms[x].attachEvent('onsubmit', handler);
}
jsFiddle: http://jsfiddle.net/nDLZJ/2/
- 使用javascript的Asp.net内容占位符
- Internet Explorer缺少占位符支持,特别是密码字段
- 如何隐藏按钮单击事件上的占位符
- 需要URL模板占位符查找和替换功能的输入
- 初始化ng模型时,Angular ui选择占位符不起作用
- 如何在ie7或更高版本中设置密码字段的占位符
- 在不使用javascript的情况下,可以在表单字段中设置文本占位符(以提示最终用户插入特定格式)
- Select2-使用自定义模板时不显示占位符
- 替换字符串中的占位符值
- 为什么我应该使用HTML5(上下文:占位符)
- 在contentEditable元素中居中占位符插入符号
- 从气球弹出窗口中删除占位符
- 选择“选项”时更改输入的占位符
- 错误:ReCAPTCHA占位符元素必须为空
- 如何更改文本区域的颜色's文本,具体取决于它是否为占位符
- 得到一个没有属性的错误“;占位符”;在xhtml strict 1.0中
- 使用Node/Javascript提取字符串中的所有占位符
- 如何通过单击唯一按钮保存下拉菜单/复选框菜单选项和占位符值
- 有没有办法只使用子指令作为保存内容的占位符
- 防止保存“占位符”