Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Передача фокуса на кнопку


Автор: V13 26.9.2007, 18:26
Помогите пожалуиста, объясните как передать фокус на кнопку!

Ситуация такова: на форме есть много кнопок и много окон, как при попадании курсора в одно определенное окно передавать фокус определеннои кнопке? Уже посмотрел много примеров, но почему-то все не выходит у меня никак.  smile
Или вместо .focus() что-то другое нужно использовать???  

Автор: solenko 26.9.2007, 18:58
Здается мне, что не в focus() дело smile
Код

<script>
function foo(el){
        var button_id = el.getAttribute('button');
        document.getElementById(button_id).focus();
}
</script>
<div button="button1" style="width: 200px; height: 200px; border: solid black 1px;" onmouseover="foo(this);">
<button id="button1">Button 1</button>
</div>
<div button="button2" style="width: 200px; height: 200px; border: solid black 1px;" onmouseover="foo(this);">
<button id="button2">Button 1</button>
</div>

Автор: V13 27.9.2007, 11:30
Спасибо но немножко не то, мне нужно, чтобы если курсор попадал в техтовое поле, то фокус передовался кнопке, а текстовое поле находится в непосредственнои близости от кнопки. Нужно что-то другое искать. 

Автор: dsCode 27.9.2007, 12:03
V13, в событии onFocus у поля передавайте фокус кнопке. 

Автор: V13 27.9.2007, 12:27
Цитата(dsCode @ 27.9.2007,  12:03)
V13, в событии onFocus у поля передавайте фокус кнопке.

Сделал как Вы сказали, почему-то теперь не могу редактировать текст в поле
Код

        function pokus(){

        document.getElementById('load').focus();
}

<form action="" method="post" id="form" onsubmit="return false">
    <div id="text"><input type="text" name="text" value="" onfocus="pokus();"/>
    </div><br />

    <div id="loaddiv">
    <input type="button" id="load" value="<?php echo $mark;?>" onclick="loadData(this.form);"/>
    </div><br />
 

Автор: dsCode 27.9.2007, 12:39
V13, 
Цитата(V13 @  27.9.2007,  11:30 Найти цитируемый пост)
мне нужно, чтобы если курсор попадал в техтовое поле, то фокус передовался кнопке

как-то мало стыкуется с:
Цитата(V13 @  27.9.2007,  12:27 Найти цитируемый пост)
почему-то теперь не могу редактировать текст в поле


Автор: V13 27.9.2007, 12:51
Ой не в поле, а в окне. В текстовом окне!!! smile  

Автор: dsCode 27.9.2007, 12:57
V13, 
Цитата(V13 @  27.9.2007,  12:51 Найти цитируемый пост)
В текстовом окне!!!

это кто? Textarea? Если да - то ее (текстарию) ждет та же учесть. Если нет - то поясните подробней, что такое "текстовое окно".

Автор: V13 27.9.2007, 13:03
Извините. Вот: 
Код

input type="text" name="text"


Я сделал на событие 
Код

onmouseover


Автор: dsCode 27.9.2007, 13:45
V13, ну это текстовое поле. А что с событием onmouseover? Когда мышка проходит над текстовым полем - кнопка получает фокус? А какой смысл? Потом, если текстовое поле получит фокус - с кнопки он все равно снимется.

Автор: V13 27.9.2007, 14:13
Да вы совершенно правы, теперь мне нужно отловить нажатие клавиши Enter в текстовом поле. Чтобы при ее нажатии выполнялся нужный скрипт. И получим полный набор!


Автор: dsCode 27.9.2007, 14:25
V13, 
Цитата(V13 @  27.9.2007,  14:13 Найти цитируемый пост)
теперь мне нужно отловить нажатие клавиши Enter в текстовом поле. Чтобы при ее нажатии выполнялся нужный скрипт


Код

<script type="text/javascript">
function initElementEvents() {
  document.getElementById('t').onkeydown = function(e) {
    e = e || window.event;
    if (e.keyCode == 13) {
      test();
    }
    return true;
  };
}

function test() {
  alert(1);
  document.getElementById('b').focus();
}
</script>
<body onLoad="initElementEvents(); return true;">
  <input type="text" id="t" />
  <input type="button" id="b" value="Button" />
</body>


Автор: V13 27.9.2007, 14:49
Спасибо, но я где-то ошибку сделал, почему-то не срабатывает
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
    <title>JavaScript und HTTP</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script src="prototype-1.5.0.js" type="text/javascript"></script>
</head>
<body onLoad="initElementEvents(); return true;">

    <script type="text/javascript">
    function reportError(){
        Alert('Fehler');
    }


    
    function pokus(){

        document.getElementById('load').focus();
}

    function initElementEvents() {
    document.getElementById('text').onkeydown = function(e) {
    e = e || window.event;
    if (e.keyCode == 13) {
      loadData(f);
    }
    return true;
    };
    }
    
    
    
    function loadData(f)
    {
        suchbegriff=f.text.value;
        locale='<?php echo $locale;?>';
        divid='ergebnis';
        var myAjax = new Ajax.Updater(
            divid,
            'ajax_suchen.php',
            {
                method: 'post',
                parameters: 'name='+suchbegriff+'&locale='+locale,
                onFailure: reportError
            }
        );
        
    }
    

    </script>

<form action="" method="post" id="form" onsubmit="return false">
    <div id="text"><input type="text" name="text" value="" onmouseover="pokus();"/>
    </div><br />

    <div id="loaddiv">
    <input type="button" id="load" value="<?php echo $mark;?>" onclick="loadData(this.form);"/>
    </div><br />
    

    
    <div id="ergebnis"/></div>
    </div>
</form>

</body>
</html>
 

Автор: V13 27.9.2007, 15:05
Firebug написал:

f has no properties




Автор: dsCode 27.9.2007, 15:49
V13, ну так конечно, в коде Вы вызываете функцию loadData с несуществующей для функции document.getElementById('text').onkeydown переменной f:

if (e.keyCode == 13) {
  loadData(f);
}


если это id формы (или объект формы), тогда из этого места надо вызывать полным путем:

if (e.keyCode == 13) {
  loadData(document.getElementById('form'));
}


Автор: V13 27.9.2007, 16:13
Огромное спасибо!!! Все вроде заработало. smile 

Спасибо Вам!

Автор: V13 6.12.2007, 17:18
Цитата(dsCode @ 27.9.2007,  15:49)
V13, ну так конечно, в коде Вы вызываете функцию loadData с несуществующей для функции document.getElementById('text').onkeydown переменной f:

if (e.keyCode == 13) {
  loadData(f);
}


если это id формы (или объект формы), тогда из этого места надо вызывать полным путем:

if (e.keyCode == 13) {
  loadData(document.getElementById('form'));
}

Спасибо!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)