Reputation: 1243
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
Upvotes: 7
Views: 34175
Reputation: 7325
Also found a nice little plugin to get the next input: http://jqueryminute.com/set-focus-to-the-next-input-field-with-jquery/
$.fn.focusNextInputField = function() {
return this.each(function() {
var fields = $(this).parents('form:eq(0),body').find('button,input,textarea,select').not(':hidden');
var index = fields.index( this );
if ( index > -1 && ( index + 1 ) < fields.length ) {
fields.eq( index + 1 ).focus();
}
else {fields.first().focus();}
return false;
});
};
Upvotes: 16
Reputation: 78667
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();
}
});
Upvotes: 5
Reputation: 8772
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(); }
});
Upvotes: 1