Поля ввода HTML не получают Фокус при нажатии


у меня есть проблема и я не могу выяснить, что именно вызывает такое поведение. Я не могу получить доступ к своим полям ввода и textareas в моей HTML-форме.

к сожалению, JS, HTML и CSS очень большие, поэтому я не могу опубликовать все это здесь.

может ли кто-нибудь сказать мне, что искать при отладке этого странного поведения?

обновление

если я наведу курсор на input поле я вижу текстовый курсор, но когда я нажмите на него поле не получает фокус. Я могу получить доступ к полю, нажав Tab ключ и если я щелкните правой кнопкой мыши на нем, а затем нажмите на поле я также получить фокус для него.

...и нет, у них нет disabled или readonly атрибуты ;-)

25 67

25 ответов:

когда я нажимаю на него поле не получает фокус. я могу получить доступ к полю, нажав "tab-key"

похоже, что вы отменили действие по умолчанию для mousedown событие. Поиск через HTML и JS для onmousedown обработчики и искать строку, которая читает.

return false;

эта строка может остановить вас от фокусировки, нажав кнопку.


re: ваш комментарий, Я предполагаю, что вы не можете редактировать код, который добавляет этот обработчик? Если вы можете, самое простое решение-просто удалить return false; заявление.

есть ли способ просто добавить функциональность к событию-триггеру, не перезаписывая его?

Это зависит от того, как обработчик прилагается. Если он прикреплен с использованием традиционного метода регистрации, например элемент.onmousedown, то вы могли бы создать обертку для него:

var oldFunc = element.onmousedown;
element.onmousedown = function (evt) {
    oldFunc.call(this, evt || window.event);
}

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

у меня тоже эта проблема. Я использовал disableSelection() метод пользовательского интерфейса jQuery на родительский div, в котором содержатся мои поля ввода. В Chrome поля ввода не были затронуты, но в Firefox входы (а также текстовые области)не были сосредоточены на Щелчке. Странная вещь здесь заключалась в том, что событие click на этих входах работало.

решение было убрать disableSelection() метод для родительского DIV.

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

эта же проблема может быть вызвана помещением элементов "input" внутри пары тегов "label".

в моем случае я намеревался создать пару тегов 'div', но вместо этого я случайно создал пару тегов' label', а затем вставил некоторые поля ввода текста ' input type="text"..- с помощью дома.

Он отображается нормально на экране, но когда я щелкнув по любому из текстовых полей, курсор продолжал прыгать обратно к первому "входу" и действительно действовал беспорядочно.

Мне потребовалось некоторое время, чтобы понять это, потому что это поведение тонкое, и совсем не то, что я ожидал бы от такой ошибки.

bsnider

использовать для тега input.

я боролся с той же проблемой некоторое время назад. Я использовал jquery.плагин макета в модальном диалоге jquery-ui, и я не мог получить доступ ни к одному из полей в нем.

это оказалось (часть div был над моими полями ввода, поэтому я не мог щелкнуть их). Вы должны проверить это и попробовать изменить z-index значение полей ввода.

это случается иногда, когда есть несбалансированные <label> теги в форме.

У меня тоже была эта проблема, и в моем случае я обнаружил, что цвет шрифта был тем же цветом фона, поэтому казалось, что ничего не произошло.

Если вы столкнулись с этой проблемой при использовании canvas с DOM на мобильных устройствах, ответ Ashwin G работал для меня отлично, но я сделал это через javascript

var element = document.getElementById("myinputfield");
element.onclick = element.select();

после этого все работало безупречно.

Я прочитал все ответы выше, и некоторые из них направили меня к проблеме, но не к решению проблемы.

основной причиной проблемы является disableSelection(). Это вызывает все проблемы, но удаление его не является решением, как (по крайней мере, в 2016 году или чуть раньше), на устройств с сенсорным экраном, вы "должны" использовать это, если вы хотите иметь возможность перемещать объекты с помощью jQuery.

решение было оставить disableSelection() к сортируемому элементу, но также добавьте действие привязки чуть выше:

 $('#your_selector_id form').bind('mousedown.ui-disableSelection selectstart.ui-disableSelection', function(event) {
    event.stopImmediatePropagation();
 })

The form в элементе jQuery просто остановить распространение на форме, так как вам может понадобиться распространение на некоторых элементах.

Это может произойти в bootstrap, если вы не размещаете свои столбцы внутри <div class ='row'>. Плавающие столбцы не очищаются, и вы можете получить следующий столбец, перекрывающий предыдущий, поэтому щелчки не будут попадать в элементы dom, где вы ожидаете.

у меня была такая проблема из-за этого кода:

$("#table tbody tr td:first-child").bind("mousedown", function(e){
    e.preventDefault();
    $(this).parents('tr').removeClass('draggable');
});

Я решил его, удалив

e. preventDefault ();

новый код:

$("#table tbody tr td:first-child").bind("mousedown", function(){
    $(this).parents('tr').removeClass('draggable');
});

У меня была аналогичная проблема - не мог понять, в чем причина, но я исправил ее, используя следующий код. Почему-то он не мог сосредоточиться только на пустых входах:

$('input').click(function () {
        var val = $(this).val();
        if (val == "") {
            this.select();
        }
    });

Я использую jQuery UI и Bootstrap поэтому я столкнулся с этой проблемой, и я думаю, что это конфликт между ними, как в обычном случае textarea или входной файл редактируется по своей природе, но я сделал это решение после тестирования всех вышеперечисленных ответов, но никто не решает кроссбраузерная поддержка для всех основных браузеров, но я решил его, и я хотел бы поделиться своим решением вы можете использовать его на ввод текста и textarea

(проверено на Рабочий стол: IE (все версии), Chrome, Safari, Windows Edge, Firefox, Visual Studio Cordova Ripple Viewer на Windows & Visual Studio Cordova Windows 10 Store App)

(протестировано на мобильных устройствах: Chrome, Firefox, Android Internet Browser & Visual Studio Cordova App на Android и Visual Studio Cordova Windows 8 + 8.1 + 10 приложение для телефона)

это HTML Код:

<textarea contenteditable id="textarea"></textarea>

это код CSS:

textarea {
    -webkit-user-select: text !important;
    -khtml-user-select: text !important;
    -moz-user-select: text !important;
    -ms-user-select: text !important;
    user-select: text !important;
    /*to make sure that background color and text color is not the same (from the answers above)*/
    background-color:#fff !important;
    color:#733E27 !important;
 }        

Это Код JQuery На Документ Готов

$("textarea").click(function() {
        setTimeout(function(){
            $("textarea").focus();
            //add this if you are using JQuery UI (From The Solutions Above)
            $("textarea").enableSelection();
            var val = $("textarea").val();
            if (val.charAt(val.length-1) !== " " && val.length !== 1) {
                alert(val.length);
                val += " ";
            }
            $("textarea").val(val);
        }, 0);
    });

    if (navigator.userAgent.indexOf('Safari') !== -1 || navigator.userAgent.indexOf('Chrome') !== -1) {
        //alert('Its Safari or chrome');
        $("textarea").onfocus(function(e) {
            setTimeout(function(){
                var end;
                if ($("textarea").val === "") {
                    end = 0;
                } else {
                    end = $("textarea").val.length;
                }
                if ($("textarea").setSelectionRange) {
                    var range = document.getElementById('textarea').createTextRange();
                    if (range) {
                        setTimeout(range, 0, [end, end]);
                    } else { // IE style
                        var aRange = document.getElementById('textarea').createTextRange();
                        aRange.collapse(true);
                        aRange.moveEnd('character', end);
                        aRange.moveStart('character', end);
                        aRange.select();
                    }
                }
                e.preventDefault();
                return false;
            }, 0);
        });
    }

вы можете проверить его на моем веб-приложении в www.gahwehsada.com

когда вы говорите

and nope, they don't have attributes: disabled="disabled" or readonly ;-)

это через просмотр html, исходный код страницы или DOM?

Если вы проверите DOM с помощью Chrome или Firefox, то вы сможете увидеть любые атрибуты, добавленные в поля ввода через javasript, или даже наложение div

на всякий случай, если кто-то еще ищет этот ответ, у нас была аналогичная проблема и мы решили ее, изменив Z-индекс входных тегов. По-видимому, некоторые другие дивы расширились слишком далеко и перекрывали входные окна.

Я просто нашел еще одну возможную причину этой проблемы, некоторые текстовые поля ввода отсутствовали закрытие "/", поэтому у меня было <input ...> когда правильная форма <input ... />. Это исправило все для меня.

в моем случае это было всплывающее окно Bootstrap в открытом состоянии. Ввод текста был в другом всплывающем окне календаря поверх Bootstrap one, вход получил свой фокус обратно после удаления tabindex="-1" атрибут из Bootstrap modal.

У меня была та же проблема. В конце концов я понял это, проверив элемент, и элемент, который я думал, что выбрал, был другим элементом. Когда я это сделал, я обнаружил, что есть скрытый элемент, который имел Z-индекс 9999, как только я исправил, что моя проблема ушла.

У меня была эта проблема более 6 месяцев, это может быть та же проблема. Основной симптом заключается в том, что вы не можете перемещать курсор или выделять текст в текстовых вводах, только клавиши со стрелками позволяют перемещаться в поле ввода. Очень раздражает проблема, особенно для полей ввода textarea. У меня есть этот html, который заполняется 1 из 100 форм через Javascript:

<div class="dialog" id="alert" draggable="true">
    <div id="head" class="dialog_head">
        <img id='icon' src='images/icon.png' height=20 width=20><img id='icon_name' src='images/icon_name.png' height=15><img id='alert_close_button' class='close_button' src='images/close.png'>
    </div>
    <div id="type" class="type"></div>
    <div class='scroll_div'>
        <div id="spinner" class="spinner"></div>
        <div id="msg" class="msg"></div>
        <div id="form" class="form"></div>
    </div>
</div>

по-видимому, 6 месяцев назад я попытался сделать всплывающее окно перетаскиваемым и потерпел неудачу, одновременно нарушая ввод текста время. Как только я удалил draggable="true", он снова работает!

проблема для меня была в том, что я использовал class="modal fade", Я изменил его на class="modal hide". Это решило проблему.

У меня была та же проблема. Рвал на себе волосы часами пробуя всевозможные растворы. Оказалось незамкнутым a тег.Попробуйте проверить свой HTML-код, решение может быть незамкнутым тегом, вызывающим проблемы

У меня была эта проблема с помощью Bootstrap + контактная форма 7. Я по какой-то причине поставил метку в качестве контейнера формы, и это было проблемой для того, чтобы не быть выбранным на мобильном телефоне.

<label>
    <contact form>...</contact form>
</label>

казалось, сломать все входы, кроме первого входа и отправки.

iPhone6 chrome

проблема для меня было размещение поля ввода внутри <label> и <p>

такой :

<label>
  <p>
     <input/>
  </p>
</label>

Я изменил их, чтобы

<div>
  <div>
     <input/>
  </div>
</div>

и это работает для меня .

после проверки этого ответа, пожалуйста, проверьте другие ответы на этой странице, эта проблема может иметь различные причины

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

Это также произойдет в любое время, когда div оказывается расположенным над элементами управления в другом div; например, используя bootstrap для макета и имея "col-lg-4", за которым следует "col-lg=8" с ошибками... правый потерянный / неправильно названный div покрывает левый и захватывает события мыши. Легко взорвать, что орфографические ошибки, - и = рядом друг с другом на клавиатуре. Итак, платит, чтобы изучить с инспектором и искать "сюрпризы", чтобы раскрыть эти дикие дивы.

есть ли невидимое окно, закрывающее контролирует и блокирует события, и как это может произойти? Оказывается, fatfingering = for-with bootstrap classnames-это один из способов...