Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 25.03.2014, 18:36
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Octane,
Чет я ниче не понял.
А если так
function isDomElement(el, type){
	return typeof el.nodeType !== "undefined" && el.nodeType === type;
}

Ведь click() есть у каждого DOM элемента. Ну а у формы есть submit
Ответить с цитированием
  #12 (permalink)  
Старый 25.03.2014, 18:50
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Или даже так
function isDomElement(el, type){
	return typeof type === "number" ? el.nodeType === type : typeof el.nodeType === "number";
}
Ответить с цитированием
  #13 (permalink)  
Старый 25.03.2014, 18:53
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

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

Для твоей задачи вообще достаточно
function isEventTarget(obj) {
	return "addEventListener" in Object(obj);
}
Ответить с цитированием
  #14 (permalink)  
Старый 25.03.2014, 18:58
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Octane,
Нет мне не нужны события, мне нужно вот что:
function(elem){
    // проверяем, что elem - DOM элемент
    // ... что-то делаем
    // а теперь делаем
    elem.click();
    // или
    elem.submit();
}

То есть, вот например:
Пользователь кликает по ссылке, но прежде чем он перейдет, нужно на лету проверить его авторизацию. Для этого функция отмеить его действие и после успешной проверки эмулирует это действие.
Это может быть клик по ссылке, отправка формы и т.д...
Ответить с цитированием
  #15 (permalink)  
Старый 25.03.2014, 19:15
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Сообщение от Octane
function isEventTarget(obj) {
    return "addEventListener" in Object(obj);
}
Эта функция вернет true для любого объекта, на который можно вешать события.
Мне же нужен DOM элемент, по которому можно кликнуть мышкой. Сюда же входят и формы
Ответить с цитированием
  #16 (permalink)  
Старый 25.03.2014, 19:27
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Вот наглядный пример:
<a href="#" id="link">Link</a>

<script>
EventHandler.add(document.getElementById("link"), click, checkAction);

function checkAction(){
	// функция перехватывает действие пользователя
	// что-то делает...
	// может проверяет форму, если вместо <a> перехватила <form>
	// И теперь функция хочет проверить, не закончилась ли сессия пользователя
	// Она обращается к модулю из общей библиотеки
	// и передает ему элемент, с которого перехватила событие click или submit
	return issetSeance(this);
}

/******/

function issetSeance(elem){
	// упрощенно: если у переданного элемента нет метода click или submit
	// просто вернуть true и не отменять действие пользователя
	if(!elem.click || !elem.submit){return true;}
	// если указанные методы присутствуют, то запустить модуль проверки авторизации
	checkLogin(elem);
    return false;
}

function checkLogin(elem){
	// тут общаемся с сервером
	// в случае успеха делаем
	elem.click() // если не форма
	elem.submit() // если форма
}
</script>

Последний раз редактировалось Hapson, 25.03.2014 в 19:30.
Ответить с цитированием
  #17 (permalink)  
Старый 25.03.2014, 19:34
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

И вот в функции issetSeance() мне нужно проверить, что передан DOM элемент, у которого есть метод click() или submit(), и что этот элемент не HTML, не BODY и не HEAD
Ответить с цитированием
  #18 (permalink)  
Старый 25.03.2014, 19:51
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Но перед тем как начать работать, функция должна удостовериться, что ей передали действительно DOM элемент, к которому применим click или submit.
Один вопрос - зачем?

Ну и, click ко всему применим.
Ответить с цитированием
  #19 (permalink)  
Старый 25.03.2014, 20:17
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Сообщение от Erolast
Один вопрос - зачем?

Ну я же привел пример. Я не знаю, как еще подробнее...
Функция, которая перехватывает действие пользователя должна вернуть true или false. Она вместо этого обращается к модулю проверки авторизации. И уже модуль должен вернуть true или false. Теперь:

1) модуль проверяет, что ему дали DOM объект и у этого объекта есть метод click() или submit(). Нахрена ему это - ниже
2) если модулю передали что-то не то, то он вернет true и просто не начнет работать.
3) если модулю передали DOM объект, у которого есть метод click() или submit(), то он возвращает false и начинает работать.
4) модуль делает запрос на сервер - авторизован ли пользователь
5) авторизован - имитируем действие пользователя, которое сами же и отменили. То есть кликаем программно по чем он там кликал

Последний раз редактировалось Hapson, 25.03.2014 в 20:23.
Ответить с цитированием
  #20 (permalink)  
Старый 25.03.2014, 20:20
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Нахрена я отменяю действие пользователя, а потом имитирую его программно?
Потому как я не знаю как поставить скрипт на паузу, пока выполняется асинхронный запрос(ы)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery: 'accepts': есть null или не является объектом sitesv Элементы интерфейса 0 08.04.2013 13:44
$('li').get(0) не является объектом? ololosh jQuery 7 25.07.2012 22:47
JQuery как из присланой ajax-ом data сделать DOM объект vuler Общие вопросы Javascript 1 16.04.2012 23:43
Перевод на новую строку JS воспринимает как объект DOM Rig Events/DOM/Window 6 26.12.2011 20:08
Почему jQuery является одновременно функцией и объектом? FINoM jQuery 3 14.02.2011 02:44