Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите с javascript событиями
 
 автор: zmax   (08.08.2009 в 12:56)   письмо автору
 
 

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

есть текст
var text = 'текст';

имеются N форм на странице, задаются координаты любой формы, требуется в эту форму ввести текст. Думаю алгоритм такой:

- имитировать клик
- по клику определить элемент
- получить доступ к элементу
- внести в него текст

может у кого-нибудь другие идеи?

для чего надо? - нужно имитировать пользователя, если есть другие варианты решения, предложите пожалуйста
ещё раз напомню проблему - нужно дать координаты (X,Y) на любой элемент на странице и в него внести текст


в поиск не отправляйте))

ничего не нашёл стоящего, или то что нуэно доработать, а я чайник

вообщем есть только функция имитации клика.. и то не работает как надо..

код такой

<script>
function test(){
alert('ss');
}
</script>
<div style="width: 100px; height: 100px; border: black 1px solid;" onClick="test();"></div>
<script>
function simulateClick(x, y) {
var el = document.elementFromPoint(x, y);
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
1, 0, 0, x, y,
false, false, false, false, 0, null);

el.dispatchEvent(evt);

}
</script>


<a href="" onclick="javascript: simulateClick(250, 250);">111</a>


требуется чтобы функция simulateClick() работала из под другой функции

<script>
fucntion other(){
  simulateClick(20,20);
</script>

а она никак не хочет (

  Ответить  
 
 автор: PAT   (08.08.2009 в 14:54)   письмо автору
 
   для: zmax   (08.08.2009 в 12:56)
 

В коде у вас написано simulateClick, т.е. СИМУЛЯЦИЯ, а в тексте вопроса вы употребляете термин ИМИТАЦИЯ.

Разница между этими терминами (ИМИТАЦИЯ и СИМУЛЯЦИЯ) принципиальна, хотя люди часто эти понятия смешивают.

ИМИТАЦИЯ - это ВОСПРОИЗВЕДЕНИЕ процесса.
СИМУЛЯЦИЯ - это создание ложного ПРЕДСТАВЛЕНИЯ О РЕЗУЛЬТАТАХ процесса.

Объясню на пальцах.
Механическое пианино ИМИТИРУЕТ процесс игры на пианино - вы не только слышите музыку, но и видите, как нажимаются клавиши. См. видеоролик.

Приняв щепоть толченого графита от карандашного грифеля и две таблетки эфедрина за два часа до посещения врача, и сильно потерев глаза непосредственно перед входом в кабинет, вы СИМУЛИРУЕТЕ своё болезненное состояние, "подтверждая" его показаниями градусника (от принятого накануне он покажет где-то 38 градусов). Самого процесса реальной болезни вы не воспроизводите.

В Javascript'e нельзя имитировать.
В Javascript'e можно только симулировать.

ИМИТИРОВАТЬ процесс клика по объекту с помощью Javascript'a вам не удастся - "подвести" курсор мыши к объекту с последующим видимым и слышимым щелчком кнопки мыши сделать у вас НЕ ПОЛУЧИТСЯ. И ни у кого не получится. Принудительное движение курсора мыши (и его кнопок) Javascript'у неподвластно.

Вы можете только СИМУЛИРОВАТЬ результат клика по объекту. Т.е. в вашем случае вы сможете добиться, чтобы браузеру "подумалось", что юзер реально кликнул по объекту и чтобы браузер вызвал функцию test ().

-----
Теперь о вашем коде.
Не работает код у вас потому, что предназначен он только и исключительно для браузера FireFox версии выше 3.0, ибо только в нём одновременно работают методы elementFromPoint () и initMouseEvent ("click"). А проверяете вы, видимо, в каком-то ином браузере.
Хотя, может быть, и в нём работать не будет - сейчас это проверить не могу, ибо Лис-тройка на домашнем компе у меня отсутствует.

  Ответить  
 
 автор: zmax   (08.08.2009 в 15:12)   письмо автору
 
   для: PAT   (08.08.2009 в 14:54)
 

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

это по одной части задачи, а вторая часть свелась к получению элемента по координатам (X,Y)

  Ответить  
 
 автор: PAT   (08.08.2009 в 15:25)   письмо автору
 
   для: zmax   (08.08.2009 в 15:12)
 

Код, работающий в MSIE и Opera, могу дать:
<script>
function test ()
{
alert ('ss');
}

function simulateClick (x, y)
{
document.elementFromPoint (x, y).onclick ();
}
</script>
<body>
<div style="width: 100px; height: 100px; border: black 1px solid" onClick="test ()"></div>

<a href="javascript: void (1)" onclick="simulateClick (40, 40); return false">111</a>
</body>
Для FireFox всё сложнее, ибо метод elementFromPoint () работает там только с версии 3.0. Но вполне можно - надо узнать координаты абрисов ВСЕХ объектов страницы, определить иерархию и видимость ВСЕХ объектов страницы и потом по данным координатам определить - по какому же объекту (из ВСЕХ имеющихся) надо кликнуть. Если кому здесь делать особо нечего, то он вам поможет :-)

PS. Обратите внимание на запись ссылки:
а) протокол javascript: используется ТОЛЬКО в атрибуте HREF тега <A> и НИГДЕ БОЛЕЕ. Если где-то в другом месте протокол javascript: встретите, то знайте - ИДИОТ такое написал;
б) если вам надо, чтобы по клику по ссылке чего-то делалось, но не происходило того ГЛАВНОГО, для чего ссылка предназначена (т.е. чтобы не было ПЕРЕХОДА на другую страницу), то ОБЯЗАТЕЛЬНО надо использовать в конце инструкции return false. Если же return false встретите в инструкции для ONCLICK на каком-то другом теге, кроме тега <A>, то знайте - ИДИОТ такое написал.

  Ответить  
 
 автор: zmax   (08.08.2009 в 15:34)   письмо автору
 
   для: PAT   (08.08.2009 в 15:25)
 

нет, вы меня не поняли
нужно чтобы функция simulateClick вызывалась вот так

<script>
function test ()
{
alert ('ss');
}

function simulateClick (x, y)
{
document.elementFromPoint (x, y).onclick ();
}

function other(){
 simulateClick (40, 40);
}

other();
</script>


т.е. вызывалась из другой функции

а есть какие-нибудь советы по получению элемента по координатам (X,Y)?

  Ответить  
 
 автор: PAT   (08.08.2009 в 15:37)   письмо автору
 
   для: zmax   (08.08.2009 в 15:34)
 

Хм...
Надо, так и вызывайте. Кто мешает-то?

Вместо строки, выделенной жирно в моём коде, пропишите:
<script>
function other ()
{
simulateClick (40, 40);
}
other ();
</script>

>"есть какие-нибудь советы по получению элемента по координатам (X,Y)?"

Я, по-моему, всё достаточно подробно "насоветовал" выше - вы разве не читали моё предыдущее сообщение? Подсказываю - в том абзаце моих "советов" несколько раз употреблено слово ВСЕХ в верхнем регистре.

  Ответить  
 
 автор: zmax   (08.08.2009 в 15:53)   письмо автору
 
   для: PAT   (08.08.2009 в 15:37)
 

спасибо, с кликом разобрался :)

а насчёт второго
>надо узнать координаты абрисов ВСЕХ объектов страницы
вот как это делается?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования