Установить фокус на следующий вход в jQuery? - PullRequest
7 голосов
/ 05 августа 2009

В настоящее время у меня есть скрипт, который проверяет значение поля выбора, а затем включает текстовое поле рядом с ним, а затем, надеюсь, устанавливает фокус.

У меня есть это на данный момент, который прекрасно работает при включении поля ввода ...

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

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

});

Честно говоря, я немного застрял в 'focus', я попытался "$ (this) .next ('input'). Focus ();" но это вообще не фокусировалось, хотя и не вызывало ошибку Javascript ...

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

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

});

Есть идеи, пожалуйста, ребята? Я действительно застрял в этом, и это было бы очень простым, но очень полезным дополнением к странице, которую я строю!

Спасибо

Ответы [ 3 ]

15 голосов
/ 05 января 2011

Также найден симпатичный маленький плагин для получения следующего ввода: 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;
    });
};
5 голосов
/ 05 августа 2009

Модифицированный ответ выше с кешированием этого объекта jq. Также фильтр внутри рядом не нужен. next () будет только когда-либо возвращать следующего родного брата. Фильтр, по сути, говорит, что получи следующее, только если это вход или какой-то другой фильтр, который ты дашь. Если вы уверены, что следующий объект является нужным, нет необходимости включать фильтр.

$("#assessed select").change(function () {
    var $this = $(this);
    if( $this.val() === 'null') {
        $this.next()
             .attr("disabled", true);
    }
    else {
        $this.next()
             .removeAttr("disabled")
             .focus();
    }
});
1 голос
/ 05 августа 2009

Я думаю, что ваша проблема может заключаться в том, что невозможно установить фокус на отключенный элемент управления вводом (по крайней мере, в некоторых браузерах / операционных системах).

Ваш focus() вызов в основном не в том блоке - он должен быть в блоке else, а не в блоке if.

Как это:

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

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