我有这个工作代码,它为还没有它的浏览器添加了占位符功能:
$(document).ready(function() {
//show placeholder text when browser doesn't support placeholder attribute
if(!Modernizr.input.placeholder){
$('[placeholder]').focus(function() {
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
input.removeClass('placeholder');
}
}).blur(function() {
var input = $(this);
if (input.val() == '' || input.val() == input.attr('placeholder')) {
input.addClass('placeholder');
input.val(input.attr('placeholder'));
}
}).blur();
$('[placeholder]').parents('form').submit(function() {
$(this).find('[placeholder]').each(function() {
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
}
});
});
}
});
问题是如果我用占位符动态添加字段,上面的代码不会显示它们。FF 显示新的占位符,但 IE 不显示。.delegate()
我的理解是,如果我希望 jQuery 监视当前和未来的 DOM 元素,我需要使用它。所以我尝试如下重写我的函数。这是一个jsFiddle。不幸的是,新版本既不作用于现有的也不是动态添加的占位符。我做错了什么?
$(document).ready(function() {
if(!Modernizr.input.placeholder){
$('form').delegate('[placeholder]','focus',function() {
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
input.removeClass('placeholder');
}
}).delegate('[placeholder]','blur', function() {
var input = $(this);
if (input.val() == '' || input.val() == input.attr('placeholder')) {
input.addClass('placeholder');
input.val(input.attr('placeholder'));
}
}).blur();
$('[placeholder]').parents('form').submit(function() {
$(this).find('[placeholder]').each(function() {
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
}
});
});
}
});