You're returning the object you created, so that will always be true.
Return the .length property and it shoud work:

$.extend($.expr[':'],{
    readonly: function(a) {
        return !!$(a).filter('[readonly="true"],
[readonly=""]').length;
    }
});

But a simpler/faster/safer alternative is the DOM property 'readOnly',
which seems to work fine on all major browsers:

$.extend($.expr[':'],{
    readonly: function(a) {
        return !!a.readOnly;
    }
});

You have to use !! to enforce returning a boolean value.

cheers,
- ricardo
On Mar 12, 9:30 am, ggerri <gerald.ressm...@ewz.ch> wrote:
> Hi there
> jQuery 1.3 has problems with handling the readonly attribute (already filed
> a ticket but I'm a bit stuck here with my project).  
>
> When you want to select  readonly inputs, you have to use [readonly=""] in
> Firefox and [readonly="true"] in IE6...
>
> ( because the DOM looks like that after ".attr('readonly','readonly');":
>  FF: <input id="A1" type="text" value="90" readonly=""/>
>  IE6: <INPUT id="A1" readOnly=True> )
>
> So I tried to extend :
>
> $.extend($.expr[':'],{ readonly: function(a) {
>                                 return $(a).filter('[readonly="true"],
> [readonly=""]');
>                                                                               
>                         }
>                                               });
>
> But:
>
>  $(':text:readonly').addClass('gtest');
>
> doesnt care about the custom selector and just choses all :text fields. :,(
>
> what's wrong with my extendtion? :confused:
>
> thanks a lot guys:handshake:
> Gerald
>
> ps.  $(':text').not("[readonly='true'], [readonly=''],
> [readonly='readonly']") works fine in both browsers selecting all input
> fields which are not readonly but using a working :readonly would be more
> elegant right?
>
> --
> View this message in 
> context:http://www.nabble.com/whats-wrong-with-my-custom-selector-%3Areadonly...
> Sent from the jQuery General Discussion mailing list archive at Nabble.com.

Reply via email to