Jquery IE8验证失败后删除占位符文本

Jquery IE8验证失败后删除占位符文本,jquery,forms,internet-explorer-8,placeholder,polyfills,Jquery,Forms,Internet Explorer 8,Placeholder,Polyfills,有类似的问题 在所有浏览器中,我的表单验证失败后,占位符文本都可以,但它在IE8中消失。最初IE8没有显示占位符,所以我用这个补丁来填充占位符 $('[placeholder]') .focus(function () { var input = $(this); if (input.val() == input.attr('placeholder')) { input.val('');

有类似的问题

在所有浏览器中,我的表单验证失败后,占位符文本都可以,但它在IE8中消失。最初IE8没有显示占位符,所以我用这个补丁来填充占位符

$('[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('');   
        }  
    })   
});

我应该首先使用不同的占位符fix/polyfill吗?或者有办法解决这个问题吗?

在不支持占位符的浏览器中,尝试使用此库查找占位符


我通过重新定义validator的默认必需函数解决了这个问题,在调用validation之前,我添加了以下内容:

    jQuery.validator.addMethod("required", function(value, element, param) {
        // check if dependency is met
        if ( !this.depend(param, element) ) {
            return "dependency-mismatch";
        }
        if ( element.nodeName.toLowerCase() === "select" ) {
            // could be an array for select-multiple or a string, both are fine this way
            var val = $(element).val();
            return val && val.length > 0;
        }
        if ( this.checkable(element) ) {
            return this.getLength(value, element) > 0;
        }
        default:
            var placeholderval = $(element).attr('placeholder');
          //if some placeholder values are actually default values, just use "default" attribute to mark them
            var defaultvar = ($(element).attr('default') === undefined);
            return ($.trim(value).length > 0 && ($.trim(value)!=$.trim(placeholderval) || !defaultvar));
    }, jQuery.validator.messages.required);

最好不要在不支持占位符的浏览器上使用占位符。无论如何,使用占位符并不意味着不必使用某种描述性标签向用户输出相关信息,这不是占位符的目标。考虑可访问性该设计不包括标签,必须使用占位符,并且在今天早上上线,所以我的老板会说它设计糟糕。。。当然,你可能不同意:)我同意:)这是一个赶情人节的工作,所以没有太多时间来做更好的设计
    jQuery.validator.addMethod("required", function(value, element, param) {
        // check if dependency is met
        if ( !this.depend(param, element) ) {
            return "dependency-mismatch";
        }
        if ( element.nodeName.toLowerCase() === "select" ) {
            // could be an array for select-multiple or a string, both are fine this way
            var val = $(element).val();
            return val && val.length > 0;
        }
        if ( this.checkable(element) ) {
            return this.getLength(value, element) > 0;
        }
        default:
            var placeholderval = $(element).attr('placeholder');
          //if some placeholder values are actually default values, just use "default" attribute to mark them
            var defaultvar = ($(element).attr('default') === undefined);
            return ($.trim(value).length > 0 && ($.trim(value)!=$.trim(placeholderval) || !defaultvar));
    }, jQuery.validator.messages.required);