Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возбуждение собственных событий, ввод клавиш без пользователя. 
:(
    Опции темы
funasian
Дата 25.7.2005, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



Вот есть такой код.

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Untitled</title>
<script>
    function test1(){
        tx11 = document.getElementById("txt1");
        tx11.focus();
        event.keyCode = 65;
        event.keyCode = 66;
        event.keyCode = 67;
    }
    
    function t1(){
        //Проверка нажатия клавиш
        //alert(event.keyCode);
        window.status = event.keyCode;
    }
</script>
</head>
<body onload="test1()"  onkeydown="t1();">
<input type="Text" id="txt1">
</body>
</html>


Хочу чтоб после загрузки в инпуте напечатолось abc.
Неинтересуют примеры с value и innerHTML.
Нужно чтобы было именно иметация нажатия клавиш от пользователя.
PM MAIL   Вверх
Sardar
Дата 26.7.2005, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Копать в сторону DOM2 document.createEvent/element.dispatchEvent или IE document.createEventObject/element.fireEvent.

Первое найдёшь здесь: http://www.w3.org/TR/2000/REC-DOM-Level-2-...vents-interface
Второе на MSDN: http://msdn.microsoft.com/workshop/author/...s/fireevent.asp


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
funasian
Дата 26.7.2005, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



Пытался разобратся но ничего не получается.
Может какой-нить примерчик?
smile
PM MAIL   Вверх
funasian
Дата 26.7.2005, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



Ещё вопрос.
Вот сдесь http://msdn.microsoft.com/library/default....turnvalue_1.asp написано что параметр event.ctrlKey можно читать и устанавливать.
Код

<script>
 event.ctrlKey = true;
</script>

Пишет ошибку "Член группы не найден".

PM MAIL   Вверх
Sardar
Дата 26.7.2005, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



По идее вот так должно быть:
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
<script type="text/javascript">
<!--

function processText() {
  var txt=document.getElementById("src").value;
  var t=document.getElementById("tgt");
  for(var i=0; i<txt.length; i++) {
    if(document.createEventObject) { //IE
       var e=document.createEventObject()
       e.type="keypress";
       e.keyCode=txt.charCodeAt(i);
       e.returnValue=true;
       e.cancelBubble=false;
       t.fireEvent("onkeypress", e);
    } else { //Mozilla(DOM2) case 
       var e=document.createEvent("keypress"); //здесь мозилла кидает ошибку
       e.keyCode=e.charCode=txt.charCodeAt(i);
       t.dispatchEvent(e);
    }
  }
}
//-->
</script>
</head>

<body>
<input type="text" id="src" /><button onclick="setTimeout(processText,1000);">Process</button><br>
<textarea id="tgt" onkeypress="alert(event.keyCode);"></textarea>

</body>
</html>

При этом чёрт его знает почему Мозилла кидает "NOT SUPPORTED" исключение. Думал потому что в событии onclick кнопки создаём, поставил на таймату, нет не пашет. Но по теории должно быть так как в примере.

Для ИЕ всё работает, события зажигаються, НО текст в текстовое поле не добавляеться, и не знаю почему...

Цитата(funasian @ 26.7.2005, 14:13)
Ещё вопрос.

Просто у тебя обьект event не найден. У ИЕ свои тараканы smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
funasian
Дата 26.7.2005, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



Вот именно что события срабатывают, но действия не выполняются.
Вот такой код по идее должен перейти на другую страницу.
Событие onclick срабатывает, а действие не происходит.

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Untitled</title>
<script>
    function t1(){
        var t=document.getElementById("ah1");
        var e=document.createEventObject()
        e.type="click";
        e.keyCode=13; //Код Enter для подстраховки
        e.returnValue=true;
        e.cancelBubble=false;
        t.fireEvent("onclick", e);
    }
</script>
</head>
<body onload="t1();">
<a id="ah1" href="http://microsoft.com/" onclick="alert(event.keyCode);">Micro</a>
</body>
</html>


Цитата

Просто у тебя обьект event не найден. У ИЕ свои тараканы 


Проверять то я его могу, значит event найден.
PM MAIL   Вверх
Sardar
Дата 26.7.2005, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Вообще это странно. Никогда мне не требовалось, потому обьяснить такое поведение(как ИЕ так и Мозиллы) не могу. Под ИЕ можно генерить любое событие и устанавливать обьекту события любые свойства.

В DOM2 можно создавать только специальные события, поддерживаемые платформой. Других ограничений не знаю.

Под ИЕ должен быть механизм отвечающий за выполнение дефолтовых действий, вообще за это отвечает returnValue, но похоже ИЕ на свойство забил...
Поищи на MSDN, я пока в затруднении smile

Цитата(funasian @ 26.7.2005, 14:13)
Пишет ошибку "Член группы не найден".

Цитата(funasian @ 26.7.2005, 18:50)
Проверять то я его могу, значит event найден.

Потому как скрипт у тебя выполняеться во время загрузки, в этот момент обьект события null, проще говоря никаких осбытий не было. Убедись в этом написав alert(event), заменив: event.ctrlKey = true;
В других местах, например в обработчике события event естественно существует.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
funasian
Дата 26.7.2005, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



Да искал я в MSDN, ничего путного нет. smile


Цитата

Потому как скрипт у тебя выполняеться во время загрузки, в этот момент обьект события null, проще говоря никаких осбытий не было. Убедись в этом написав alert(event), заменив: event.ctrlKey = true;
В других местах, например в обработчике события event естественно существует.


Вот страница полностью загрузилась. Кликаем где угодно в теле. И получаем ошибку после алерта.
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Untitled</title>
<script>
    function t15(){
    alert("aa");
    window.event.ctrlKey = true;
    }
</script>
</head>
<body onclick="t15();">
</body>
</html>


Кстати вот такой код работает. Заменяет при вводе * на точку.

Код

<html>
<script>
function Test()
{
 //alert("1");
 if (event.keyCode==42) {event.keyCode=8226;}
}

</script>
<input type=text name=F3 onkeypress=Test() style="font-family: tahoma,verdana,sans-serif;font-size:18px;">
</html>


Это сообщение отредактировал(а) funasian - 26.7.2005, 23:04
PM MAIL   Вверх
Sardar
Дата 26.7.2005, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



В MSDN написанно "Sets or retrieves the state of the CTRL key.", проверяю твой код, не пашет. Поставил на таймаут, как и следует event=null, другие события(onkeydown, onkeypress) тоже не позволяют менять свойство.

У ИЕ такая ошибка возникает когда он не может найти геттера/сеттера свойства обьекта.

Пиши MS, жалуйся что их дока ошибочна smile Xотя возможно установить поле можно только для собственных событий.

Цитата(funasian @ 26.7.2005, 21:41)
Кстати вот такой код работает. Заменяет при вводе * на точку.

Угу, так транслит на translit.ru работает.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
funasian
Дата 26.7.2005, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



Получается что никак это сделать невозможно?

Цитата

Угу, так транслит на translit.ru работает.


Может быть при вводе с клавы возникает ещё какое-то событие, которое не документированно. И оно разрешает показывать ту клавишу которую пытаешся сымитировать?

Это сообщение отредактировал(а) funasian - 26.7.2005, 23:19
PM MAIL   Вверх
Sardar
Дата 27.7.2005, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(funasian @ 26.7.2005, 22:16)
Получается что никак это сделать невозможно?

Если поискать хорошо, может что нибудь найдёться. Я своим проектом занят, беглым взглядом по MSDN'ну ничего не нашёл.

Цитата(funasian @ 26.7.2005, 22:16)
Может быть при вводе с клавы возникает ещё какое-то событие, которое не документированно. И оно разрешает показывать ту клавишу которую пытаешся сымитировать?

Пробуем зажечь всю цепочку onkeydown, up, press.
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
<script type="text/javascript">
<!--

function processText() {
  var txt=document.getElementById("src").value;
  var t=document.getElementById("tgt");
  for(var i=0; i<txt.length; i++) {
       var e=document.createEventObject()
       e.keyCode=txt.charCodeAt(i);
       e.returnValue=txt.charAt(i);
       e.cancelBubble=false;
       t.focus();
       t.fireEvent("onkeydown", e);
       t.fireEvent("onkeyup", e);
       t.fireEvent("onkeypress", e);
  }
}
//-->
</script>
</head>

<body>
<input type="text" id="src" /><button onclick="setTimeout(processText,1000);">Process</button><br>
<textarea id="tgt"></textarea>

</body>
</html>

У меня результат тот же, поле пустое.
Добавлено @ 00:08
Интересно, попробовав такой изврат, получаю ошибку в 15 строке, поле keyCode только для чтения smile
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
<script type="text/javascript">
<!--
var gevent=null;
function processText() {
  var txt=document.getElementById("src").value;
  var t=document.getElementById("tgt");
  for(var i=0; i<txt.length; i++) {
       alert(gevent);
       var e=gevent? gevent: document.createEventObject();
       e.keyCode=txt.charCodeAt(i);
       e.returnValue=txt.charAt(i);
       e.cancelBubble=false;
       t.focus();
       t.fireEvent("onkeydown", e);
       t.fireEvent("onkeyup", e);
       t.fireEvent("onkeypress", e);
  }
}
//-->
</script>
</head>

<body>
<input type="text" id="src" onkeypress="gevent=event; alert(gevent);"/><button onclick="setTimeout(processText,1000);">Process</button><br>
<textarea id="tgt"></textarea>

</body>
</html>



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
funasian
Дата 27.7.2005, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



Хорошо. Пойдем от противного. smile

Есть ли возможно перехватить полностью все события, не только те которые описаны. А полностью все и выводить их куда-то? То есть всех ементов и вывод что ето за евент.
PM MAIL   Вверх
Sardar
Дата 27.7.2005, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



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


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
funasian
Дата 27.7.2005, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



Я имею ввиду вот какой перехват. Это приблизительный код.

Код

<script to="event">
 
 //Пробежатся по всем event который произошли, влаг ведь у них должен быть
 //Даллее собрать всю инфу и вывести в текст арею или простов в код иннером.
 //Информацию о всех которые установленны и какие у них в данный момент установленны параметры
</script>


Вот что имелось ввиду. smile
PM MAIL   Вверх
sergejzr
Дата 27.7.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Цитата(Sardar @ 26.7.2005, 18:13)
При этом чёрт его знает почему Мозилла кидает "NOT SUPPORTED" исключение. Думал потому что в событии onclick кнопки создаём, поставил на таймату, нет не пашет. Но по теории должно быть так как в примере.

Это глюк новой мозиллы до 1.0.4 (включительно) всё работает. Пока я тоже не нашёл хвостов, глюк это или фича smile
Скорее всего отключили суппорт по соображением секьюрити, что так же означает, что придётся транслит переписывать через одно место, с гашением события и переписыванием value.

Сардару:
Кстати в новой мозилле по моему ещё больше глюков по событиям. Например горячие клавиши всё ещё передают события системе на моём компе... В старых версиях проверял, всё отлично работает...


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0937 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.