tags:

views:

1240

answers:

2

Hi guys,

I've currently got a script that'll check for the value of a select box, and then enable a text field right next to it, and then hopefully set focus.

I have this at the moment which works fine at enabling the input field...

$("#assessed select").change(function () {

 if($(this).val() == 'null') { $(this).next('input').attr("disabled", true);  }
 else { $(this).next('input').removeAttr("disabled"); }

});

I'm a bit stuck on the 'focus' bit to be honest, I tried "$(this).next('input').focus();" but that didn't focus at all, although it didn't bring up a Javascript error either...

$("#assessed select").change(function () {

 if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); $(this).next('input').focus(); }
 else { $(this).next('input').removeAttr("disabled"); }

});

Any ideas please guys? I'm really stuck on this and it'd be a very simple, but very useful addition to the page I'm building!

Thanks

A: 

I think that your problem might be that it's not possible to set the focus to a disabled input control (at least in some browsers/operating systems).

Your focus() call is basically in the wrong block - it should be in the else block, not the if block.

Like this:

$("#assessed select").change(function () {

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); }
    else { $(this).next('input').removeAttr("disabled"); $(this).next('input').focus(); }
});
Rob Knight
Hah! Many thanks Rob... I just realised I put the focus into the 'if' and not the 'else'!Absolute schoolboy error, sorry and many thanks - wasn't until you posted that I realised :)
Nick
Remember to cache the $(this) rather than calling it multiple times
redsquare
Done, thanks :)
Nick
+1  A: 

Modified of the above answer with cached this jq object. Also the filter inside next is not needed. next() will only ever return the next sibling. The filter is basically saying get me the next only if it is an input or whatever filter you give. If you are sure the next is the desired object there is no need to include the filter.

$("#assessed select").change(function () {
    var $this = $(this);
    if( $this.val() === 'null') {
        $this.next()
             .attr("disabled", true);
    }
    else {
        $this.next()
             .removeAttr("disabled")
             .focus();
    }
});
redsquare
Absolutely perfect, and a much better solution than what I was using, thank you!
Nick