Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Есть ли фокус? (https://javascript.ru/forum/events/3698-est-li-fokus.html)

mindguru 15.05.2009 11:39

Есть ли фокус?
 
Добрый день! Очень надо определить, есть ли фокус у конкретного поля ввода, чтобы в зависимости от этого совершать или не совершать какие-либо действия. Методы onblur и onfocus в IE почему-то не работают. Пробовал писать в тексте или устанавливать динамически, не работает. Можете что-нибудь посоветовать кроме пользоваться другим браузером? В том-то и дело, что заказчик хочет, чтобы работало в Internet Explorer и Firefox.

Pattern 15.05.2009 11:56

Цитата:

Сообщение от mindguru
Методы onblur и onfocus в IE почему-то не работают.

Покажите участок кода, который у вас не работает...

mindguru 15.05.2009 14:06

Код:

<input type="text" class="s" id="stext" onfocus="stextactive=true" onblur="stextactive=false">

x-yuri 15.05.2009 14:15

и как этот stextactive используется? И для чего, собственно

mindguru 15.05.2009 14:43

Я же говорил, что-то типа if(stextactive) .... Вверху даже такое есть: var stextactive = false;. А почему не работает? Потому что alert(stextactive) всё время пишет false...
На всякий случай: я не тупее паровоза.
Кстати, onfocus="alert()" тоже пробовал...

Gvozd 15.05.2009 14:56

Цитата:

Сообщение от mindguru
Кстати, onfocus="alert()" тоже пробовал...

да.ты молодец.алерт срабатывает,но только при алерте фокус-то моментально теряется
а сами события работают ОТЛИЧНО!
попробуйте сами на простейшем примере

mindguru 15.05.2009 14:58

Да в том-то и дело, что алерт НЕ СРАБАТЫВАЕТ!
(Про паровоз повторяю...)

x-yuri 15.05.2009 15:04

раскажи для начала, зачем тебе нужен фокус, то что ты stextactive в if'е используешь, это понятно... фокус тебе зачем нужен? Что ты с ним делаешь?

Цитата:

Да в том-то и дело, что алерт НЕ СРАБАТЫВАЕТ!
а alert(1); срабатывает?

p.s. забудь про свой паровоз

Gvozd 15.05.2009 15:09

а выглядит, что про паровоз и себя вы врете.
Цитата:

Сообщение от Gvozd
попробуйте сами на простейшем примере

это я для кого написал?
вот вам, убедитесь что у нормальных людей все работает:
<html>
<head>
<script type="text/javascript">
stextactive=null;
function focus_text(){
stextactive=true;
document.getElementById('mes').innerHTML+='Focus<br/>';
}
function blur_text(){
stextactive=false;
document.getElementById('mes').innerHTML+='Blur<br/>';
}

window.onload=function(){
setInterval(function(){document.getElementById('stextactive').innerHTML=stextactive},100);
}
</script>
</head>
<body>
<input type="text" onfocus="focus_text()" onblur="blur_text()" />
<div id="mes"></div>
<hr>
<div id='stextactive'></div>
</body>
</html>

mindguru 15.05.2009 15:10

Цитата:

Сообщение от x-yuri (Сообщение 19070)
раскажи для начала, зачем тебе нужен фокус

Может, те ещё исходники программы выслать? Говорят, надо, значит, надо...

Цитата:

Сообщение от x-yuri (Сообщение 19070)
а alert(1); срабатывает?

Чудак-человек! В осле алерт без аргументов работает ничуть не хуже, чем с аргументами (так и знал, что к этому прицепишься). Трабл в том, что алерт не срабатывает именно в данном случае...

mindguru 15.05.2009 15:13

Да, кусок работает... Странно...
Ладно, пойду поищу ошибки в своей ДНК...

Pattern 15.05.2009 15:32

Цитата:

Сообщение от mindguru
<input type="text" class="s" id="stext" onfocus="stextactive=true" onblur="stextactive=false">

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

Riim 15.05.2009 15:53

Цитата:

Сообщение от Pattern
руки бы поотрывать за такое! Учите матчасть, уважаемый.

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

Gvozd 15.05.2009 15:57

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

Riim 15.05.2009 16:05

Цитата:

Сообщение от Gvozd
ну, конечно если не брать тот факт что он не закрыт, но это мелочи

Для html закрыт.
Для xhtml не закрыт. Но руки то за это зачем отрывать.

x-yuri 15.05.2009 16:23

Цитата:

Может, те ещё исходники программы выслать?
омг, зачем мне твои исходники?
Цитата:

Говорят, надо, значит, надо...
Не хочешь говорить - дело твое, никто не заставляет
Цитата:

Чудак-человек! В осле алерт без аргументов работает ничуть не хуже, чем с аргументами (так и знал, что к этому прицепишься). Трабл в том, что алерт не срабатывает именно в данном случае...
я не цеплялся, а предположил, в отличие от тебя
Цитата:

Но руки то за это зачем отрывать
может за глобальные переменные

Gvozd 15.05.2009 16:30

Цитата:

Сообщение от x-yuri
может за глобальные переменные

умение не срать в глобальной области лишними переменными, оборачивая их в замыкания, не назначать inline-обработчики, а вешать их динамически, и еще много чего еще, есть скорее навык приходящий с опытом, и отделяющий начинающего от практикующего.отрывать руки за "грязный код" в 2- строк незачем. в обещм непонятно, что имел в виду Pattern. самому интересно что не так

Pattern 15.05.2009 16:52

Честно скажу, что такое извращённое написание кода удивило своей работоспобностью. Думал обратное, пока не проверил. Однако, переназначать переменную явным образом непосредственно в событии, это как то... :blink: Для приличия бы хотя бы в фукнцию такое назначение перенаправить.
Одного понять не могу, данный код нормально работает и без всякой дополнительной помощи, в чём сыр бор то?

Riim 15.05.2009 17:58

Цитата:

Сообщение от Pattern
извращённое написание кода

Самое обычное. Все новички начинают писать именно так. Большинство книг и справочников пестрят подобными кусками кода. Да весь интернет буквально напичкан подобным кодом. Расскажите, как вы изучали javascript, что сразу стали писать в проф-стиле. Или как вы пишите? Как бы вы написали этот кусок кода?

Цитата:

Сообщение от Pattern
Для приличия бы хотя бы в фукнцию такое назначение пере направить.

Это и так делается автоматически: http://javascript.ru/tutorial/events/intro

Цитата:


Дело в том, что при назначении onclick в HTML браузер автоматически создает функцию-обработчик из содержимого кавычек.



--------

В следующий раз хорошо подумайте прежде чем предлагать кому то обрывать руки.

B~Vladi 15.05.2009 18:39

Бредня какая-то...

<input type="text" onfocus="alert('test')" />


Работает в IE6+. Проверенно.

Сорри за оффтоп...

Gvozd 15.05.2009 18:49

B~Vladi,
а почему оно не должно работать по вашему?

mindguru 15.05.2009 22:01

Автономно - да, работает. Но я создаю всю эту хрень динамически, примерно вот так:
Код:

  dom5 = document.createElement('ul'); dom5.className = "s_ul";
  text = '<input type="text" onfocus="alert(0)">';
  dom5.innerHTML = text; dom4.appendChild(dom5); dom3.appendChild(dom4);

и НЕ РАБОТАЕТ! По-разному уже пробовал... Господа знатоки, просьба не ругать за лишние куски типа className и не придираться особо, дело-то не в этом. А насчёт закрытия тэга скажу так. Есть стандарт HTML. Есть стандарт JavaScript. И при том, что все программы-браузеры получили сертификат соответствия этому стандарту (иначе бы на рынок их никто не выпустил), всё это в куче (HTML+JavaScript) в каждом из браузеров работает ой как по-разному. Кстати, дискуссия о написании кода довольно интересна. Если позволите, я тут поприсутствую...

Riim 15.05.2009 22:11

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

x-yuri 16.05.2009 03:01

Цитата:

все программы-браузеры получили сертификат соответствия этому стандарту (иначе бы на рынок их никто не выпустил),
откуда такая информация

в тэге ul могут быть только li - http://www.w3.org/TR/html401/struct/lists.html#edef-UL

несмотря на это у меня работает

Цитата:

и НЕ РАБОТАЕТ!
где?

mindguru 16.05.2009 14:03

Да нигде не работает? Что вы прицепились к этому ul? Он здесь совершенно ни при чём. Говорю же, пробовал указывать onfocus явно или присваивать потом - один пень не работает!

Gvozd 16.05.2009 14:12

mindguru,
а полный код можно?

B~Vladi 18.05.2009 10:10

Цитата:

Сообщение от Gvozd (Сообщение 19104)
B~Vladi,
а почему оно не должно работать по вашему?


Цитата:

Сообщение от mindguru (Сообщение 19067)
Да в том-то и дело, что алерт НЕ СРАБАТЫВАЕТ!
(Про паровоз повторяю...)

Енто не по-моему...

B~Vladi 18.05.2009 10:17

Цитата:

Сообщение от mindguru (Сообщение 19122)
Автономно - да, работает. Но я создаю всю эту хрень динамически, примерно вот так:
Код:

  dom5 = document.createElement('ul'); dom5.className = "s_ul";
  text = '<input type="text" onfocus="alert(0)">';
  dom5.innerHTML = text; dom4.appendChild(dom5); dom3.appendChild(dom4);

и НЕ РАБОТАЕТ!

Лучше писать что-то вроде того:

var dom5 = document.createElement('ul');
dom5.className = "s_ul";
var text = document.createElement('input');
text.type='text';
text.onfocus=function(){alert('РАБОТАЕТ')}

dom4.appendChild(dom5);
dom5.appendChild(text);

// Что - куда вставлять неважно... Если не так...

x-yuri 18.05.2009 13:03

Цитата:

var text = document.createElement('input');
text.type='text';
только при создании input'ов, отличных от text нужно помнить, что
Цитата:

You must perform a second step when you use createElement to create the input element. The createElement method generates an input text box, because that is the default input type property. To insert any other kind of input element, first invoke createElement for input, and then set the type property to the appropriate value in the next line of code.
p.s. innerHTML скорее всего будет в html 5

B~Vladi 18.05.2009 14:07

Ничё не понял...:wacko: Можно перевести?!


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