Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Не передается фокус на input (https://javascript.ru/forum/events/44003-ne-peredaetsya-fokus-na-input.html)

jobmsk 30.12.2013 18:51

Не передается фокус на input
 
структура такая
<div id="ff" style="width:100px;height:100px;background-color:#ccc">
<input type="text" value="wow" id="my_input" style="display:none" />
</div>





при клике на div , происходит смена display:block;
и должна происходить передача фокуса на input через .focus()

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

Заранее благодарен

danik.js 30.12.2013 19:59

Цитата:

Сообщение от jobmsk
и должна происходить передача фокуса на input через .focus()

Ага, через .focus() должна. А вот через .focus(function(){}) - нет!

В jQuery такие функции имеют два назначения - если агрументов нет, то вызывается одноименное событие. Если же передана функция - то никакого события не происходит, а сама функция устанавливается как обработчик события.
Так что после навешивания обработчика тебе нужно еще само событие сгенерировать, то есть вызывать .focus() без аргументов.

Вобще, в случае с focus() и click() происходит не только создание события, но и вызов одноименной функции, определенной на DOM-элементе, если я не ошибаюсь. Но большой разницы нет.

jobmsk 30.12.2013 20:20

Цитата:

Сообщение от danik.js (Сообщение 290095)
Ага, через .focus() должна. А вот через .focus(function(){}) - нет!

да, этот момент я заметил..но!!!
если я делаю click не мышкой а через trigger ('click'),то фокус опять не передается

danik.js 30.12.2013 20:49

Браузер какой? В хроме все пучком:
<div id="ff" style="width:100px;height:100px;background-color:#ccc">
<input type="text" value="wow" id="my_input" style="display:none" />
</div>

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$("#ff").click(function(){
    $("#my_input").show();
    $("#my_input").focus(function(){
        $(this).select();
    });
    $("#my_input").focus();
});
</script>

jobmsk 30.12.2013 21:39

ага точно, в FF значит проблема

danik.js 30.12.2013 22:20

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

danik.js 30.12.2013 22:23

Цитата:

Сообщение от jobmsk
ага точно, в FF значит проблема

Хз, у меня в FF 26 винда все отлично фокусируется.

jobmsk 30.12.2013 22:56

Цитата:

Сообщение от danik.js (Сообщение 290115)
Хз, у меня в FF 26 винда все отлично фокусируется.

точно при переходе через trigger фокусируется?

jobmsk 30.12.2013 23:06

странно тут фокусируется, а тут нет http://jsfiddle.net

danik.js 30.12.2013 23:16

Цитата:

Сообщение от jobmsk
странно тут фокусируется, а тут нет http://jsfiddle.net

:no: все ок хоть где

jobmsk 31.12.2013 02:08

Цитата:

Сообщение от danik.js (Сообщение 290125)
:no: все ок хоть где

сюда http://jsfiddle.net
вставляю то же код, и фокус не передается!!!
и видимо по этой же причине и на моем ресурсе фокус не фурычит....

danik.js 31.12.2013 04:24

повторюсь тоже
Цитата:

Сообщение от danik.js
все ок хоть где


jobmsk 31.12.2013 10:51

тогда я что-то не понмаю....как один код может по разному работать причем в одних и тех же браузерах , но у разных юзеров....

danik.js 31.12.2013 11:33

Цитата:

Сообщение от jobmsk
тогда я что-то не понмаю....как один код может по разному работать причем в одних и тех же браузерах , но у разных юзеров....

Да по-всякому. Было бы гораздо проще разобраться если бы ты скинул ссылку на свой fiddle. Я думал ты понял, а ты нифига не догоняешь.

jobmsk 31.12.2013 11:34

http://jsfiddle.net/jobmsk/TSq/1/

самое дурное ,что только на javascript форус работает...чудеса однако

danik.js 31.12.2013 12:47

Там какие-то глюки. Дело не в коде. Даже если тупо убрать код, то при клике по полю курсор появляется, но фактически ввод происходит в редакторе кода, а не в поле. Но это происходит не всегда.

И кстати в коде ошибка. Навешивать обработчик focus надо вне обработчика клика. Иначе с каждым кликом будет увеличиваться количество обработчиков-дубликатов, выполняющих this.select()

jobmsk 31.12.2013 13:02

если unbind делать, то размножаться не будет..проблема не в этом, а втом что нужно чтобы фокус не мышкой , а через trigger появлялся....а по факту такая фича только javascript работает , больше нигде не удалось добиться

danik.js 31.12.2013 13:07

Цитата:

Сообщение от jobmsk
больше нигде не удалось добиться

Ну не знаю че у тя за проблемы. Всего-то вызвать element.focus() - он должен прекрасно работать.
Думаю что без фреймов все будет отлично работать во всех браузерах.

jobmsk 31.12.2013 13:12

сейчас этот код на отдельную сраницу вынес...и он блин заработал, правда в оригинале к input еще keydown привязан
те по клавише и просиходит запуск trigger с активацией и фокусировкой на следующем input

jobmsk 31.12.2013 14:09

похоже проблема проявляется в полной контрукции, на втором inpute припереходе через Tab

danik.js 31.12.2013 14:28

Потому что для таба действие по умолчанию - переход к следующему элементу на странице, учавствующему в обходе. На момент нажатия поле скрыто, так что оно следующим не является. А в таком случае фокус переходит к <body>. Что и происходит у тебя. Вызывай e.preventDefault()

И не тупи, поправь код чтобы небыло кучи обработчиков - вынеси навес обработчиков за пределы обработчиков click. А то может появиться куча других подобных вопросов, типа что все тупит.

jobmsk 31.12.2013 14:41

Цитата:

Сообщение от danik.js (Сообщение 290186)
А в таком случае фокус переходит к <body>. Что и происходит у тебя. Вызывай e.preventDefault()

.

а вот про это я не подумал, так а prevent -то куда вешать на keydown?

jobmsk 31.12.2013 14:47

а вот за эту подсказку спасибо....реально промахивался фокус, prevent вставлял , но видимо не заметил эффект о него


Часовой пояс GMT +3, время: 08:24.