Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: chrome событие click или keypress

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: как сэмулировать событие?
Panoptik
Отправлено: 07 Февраля, 2012 - 14:53:12
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




всем привет!

пол дня мучаюсь над проблемой
вобщем есть окно в fancybox (плагин jquery - модальное окно)
в нем форма с кнопкой сабмит.
CODE (html):
скопировать код в буфер обмена
  1. <form method="post" id="info"  style="margin:0 0 0 20px;" onsubmit="return submit_form();">

на сабмит ставлю обработчик с ajax запросом
CODE (javascript):
скопировать код в буфер обмена
  1. function submit_form() {  
  2.     var data = $('#info').serialize();
  3.     $.post('/includes/jprocessing.php',{'action':'save_char_goods','data':data},function(msg){
  4.         if(msg.match(/успешно/)){
  5.             alert(msg);
  6.             //$.fancybox.close();
  7.             //jQuery.fn.fancybox.close();
  8.             if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
  9.                 //$('#fancybox-close').click();
  10.                 evt = document.createEvent("HTMLEvents");
  11.                 evt.initEvent("keyPressed","true","true");
  12.                
  13.             } else {
  14.                 document.getElementById('fancybox-close').click();
  15.             }
  16.  
  17.            
  18.         } else {
  19.             alert(msg);
  20.         }
  21.     });
  22.     return false;
  23. }

суть задачи в том, что если ajax возвращает успешный результат - нужно закрыть этот фансибокс. в нем есть кнопка закрыть. вот я и пытаюсь закрыть его имитируя нажатие этой кнопки. и всё бы хорошо - но ХРОМ пишет что у него нет события "клик" для "ссылки". и правильно говорит, потому что по стандарту w3c - событие клик имеют только элементы формы.
вобщем у меня 2 мысли: либо как нибудь с имитировать нажатие этой ссылки, либо имитировать нажатие кнопки "escape" у которой keyCode = 27.

Может кто сталкивался с подобным или имеет другие мысли? Прошу, поделитесь!


-----
Just do it
 
 Top
EuGen Администратор
Отправлено: 07 Февраля, 2012 - 15:07:20
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. $('#fancybox-close').click()

?
Вероятно, подойдет разрушать элемент самостоятельно? (или нужно чтобы сработал обработчик события?)
Сделать через API fancybox'a ? (не вспомню что там именно)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
garvey
Отправлено: 07 Февраля, 2012 - 15:08:02
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




В API написано, что можно закрыть такой командой:
$.fancybox.close();
 
 Top
Viper
Отправлено: 07 Февраля, 2012 - 15:12:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Если документ iframe то лучше так делать

CODE (javascript):
скопировать код в буфер обмена
  1. var _$ = parent.jQuery;
  2.  
  3. _$('form#info').submit(function(e){
  4.         e.preventDefault();
  5.         var request = _$.ajax({
  6.                 type: 'POST',
  7.                 url: _$(this).prop('action'),
  8.                 data: 'action=save_char_goods&data='+_$(this).serialize()
  9.         }).done(function(response){
  10.                 if (response.test(/успешно/)) {
  11.                         // что-то делаем
  12.                 } else {
  13.                         _$.fancybox.close();
  14.                 }
  15.         });
  16. });


Есно у формы убрать onsubmit. И в action формы прописать куда отправлять.

(Отредактировано автором: 07 Февраля, 2012 - 15:13:24)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Panoptik
Отправлено: 07 Февраля, 2012 - 15:14:14
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




ничего из вышеперечисленного не работает(
EuGen пишет:
$('#fancybox-close').click()
на это не реагирует хром
garvey пишет:
$.fancybox.close();
на это ругается что несуществует такого метода...
перечитал всевозможные статьи и мануалы, везде дают похожие советы, но почему они не работают в хроме?
(Добавление)
Viper пишет:
Если документ iframe то лучше так делать
документ не айфрейм. всё в обычных дивах


-----
Just do it
 
 Top
EuGen Администратор
Отправлено: 07 Февраля, 2012 - 15:27:58
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




http://stackoverflow[dot]com/questio[dot][dot][dot]ed-google-chrome
(последние комментарии)
?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Viper
Отправлено: 07 Февраля, 2012 - 15:39:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Panoptik тогда просто через $ обращение.

EuGen Проблема еще и в том что контент не в iframe.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Panoptik
Отправлено: 07 Февраля, 2012 - 15:49:52
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




сделал вот так:
CODE (javascript):
скопировать код в буфер обмена
  1.  function submit_form() {  
  2.     var data = $('#info').serialize();
  3.     $.post('/includes/jprocessing.php',{'action':'save_char_goods','data':data},function(msg){
  4.         if(msg.match(/успешно/)){
  5.             alert(msg);
  6.             $.fancybox.close();
  7.         } else {
  8.             alert(msg);
  9.         }
  10.     });
  11.     return false;
  12. }

вот что написал хром Uncaught TypeError: Cannot call method 'close' of undefined
(Добавление)
попробовал вариант с iframe, поставил тип iframe - но вылезла кучка проблем , таких как отсутствие стилей в подгружаемом файле... вобщем на досуге еще попробую. всем спасибо за советы


-----
Just do it
 
 Top
tuareg
Отправлено: 07 Февраля, 2012 - 19:32:23
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




У Вас в чем-то другом проблема. Вот простой пример ХРОМ нормально эмулирует событие click(). http://jsfiddle[dot]net/tuareg/sm7mE/2/ .
 
 Top
IllusionMH
Отправлено: 08 Февраля, 2012 - 00:41:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Panoptik, вот что выдал гугл

upd. ай Недовольство, огорчение дописал после ответа. перенес вниз

(Отредактировано автором: 08 Февраля, 2012 - 01:18:12)

 
 Top
tuareg
Отправлено: 08 Февраля, 2012 - 00:58:33
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Попробуйте (я уверен на 90% Улыбка ) использовать $.Deferred().
 
 Top
IllusionMH
Отправлено: 08 Февраля, 2012 - 01:17:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




tuareg, если назначить свое событие (ну там алерт и прочее) - все срабатывает, но если не назначать - просто ссылка не нажимается(не происходит переход на другую страницу по ссылке).
Пробовал на этом коде: цвет меняется, перехода по ссылке - нет.
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <a href="http://forum.php.su" id="clickMe">forum</a>
  3. <script src="jquery-1.7.1.js"></script>
  4. <script>
  5.   $("#clickMe").trigger("click").css("color", "red");
  6.   //пробовал еще и эти варианты
  7.   //$("#clickMe").css("color", "red").trigger("click");
  8.   //$("#clickMe").click().css("color", "red");
  9.   //$("#clickMe").click(function() {return true;}).click().css("color", "green");
  10. </script>
  11.  

Еще пробовал назначать функцию которая только return
 
 Top
tuareg
Отправлено: 08 Февраля, 2012 - 01:26:02
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




А Вы поняли что вообще написали и что хотите сделать??? Улыбка (не обижайтесь)
Взял первый пример
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $("#clickMe").trigger("click").css("color", "red");
  3.  

Юзер нажал на #clickMe страница перегрузилась. И css("color", "red"); просто не сработал.
 
 Top
IllusionMH
Отправлено: 08 Февраля, 2012 - 01:45:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




tuareg, в том то и дело, что знаю что я писал. Я не обижаюсь, т.к. видимо вы пропустили строку.
IllusionMH пишет:
Пробовал на этом коде: цвет меняется, перехода по ссылке - нет.


Тестировал в html файле с таким содержимым.
CODE (html):
скопировать код в буфер обмена
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.   <meta charset=utf-8>
  5.   <title>A simple HTML5 page layout</title>
  6. </head>
  7. <body>
  8. <a href="http://forum.php.su" id="clickMe">forum</a>
  9. <script src="jquery-1.7.1.js"></script>
  10. <script>
  11.   $("#clickMe").trigger("click").css("color", "red");
  12.   //пробовал еще и эти варианты
  13.   //$("#clickMe").css("color", "red").trigger("click");
  14.   //$("#clickMe").click().css("color", "red");
  15.   //$("#clickMe").click(function() {return true;}).click().css("color", "green");
  16. </script>
  17. </body>

Opera 12, FF 10, IE9, GH16
Результат: ссылка красная, а форума не видать.

P.S. Проблема может быть из-за того, что я сижу через прокси(прописан во всех браузерах, если клацнуть на ссыль - переходит)?
(Добавление)
Залил на хостинг, пробовал с тачки с прямым доступом к иннету - тот же результат.

(Отредактировано автором: 08 Февраля, 2012 - 01:47:51)

 
 Top
tuareg
Отправлено: 08 Февраля, 2012 - 02:06:03
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Сейчас понял. Вот код
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $("#clickMe").click(function(){
  3.                 location.href=this.href;
  4. }).
  5. css("color", "red").
  6. trigger("click");
  7.  
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB