Octane,
Чет я ниче не понял. А если так
function isDomElement(el, type){
return typeof el.nodeType !== "undefined" && el.nodeType === type;
}
Ведь click() есть у каждого DOM элемента. Ну а у формы есть submit |
Или даже так
function isDomElement(el, type){
return typeof type === "number" ? el.nodeType === type : typeof el.nodeType === "number";
}
|
Я про то, что ты не свою задачу решаешь, тебе нужен объект с событиями, а ты проверяешь тип, проверяй возможность использовать события
Для твоей задачи вообще достаточно
function isEventTarget(obj) {
return "addEventListener" in Object(obj);
}
|
Octane,
Нет мне не нужны события, мне нужно вот что:
function(elem){
// проверяем, что elem - DOM элемент
// ... что-то делаем
// а теперь делаем
elem.click();
// или
elem.submit();
}
То есть, вот например: Пользователь кликает по ссылке, но прежде чем он перейдет, нужно на лету проверить его авторизацию. Для этого функция отмеить его действие и после успешной проверки эмулирует это действие. Это может быть клик по ссылке, отправка формы и т.д... |
Цитата:
Мне же нужен DOM элемент, по которому можно кликнуть мышкой. Сюда же входят и формы |
Вот наглядный пример:
<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>
|
И вот в функции issetSeance() мне нужно проверить, что передан DOM элемент, у которого есть метод click() или submit(), и что этот элемент не HTML, не BODY и не HEAD
|
Цитата:
Ну и, click ко всему применим. |
Цитата:
Ну я же привел пример. Я не знаю, как еще подробнее... Функция, которая перехватывает действие пользователя должна вернуть true или false. Она вместо этого обращается к модулю проверки авторизации. И уже модуль должен вернуть true или false. Теперь: 1) модуль проверяет, что ему дали DOM объект и у этого объекта есть метод click() или submit(). Нахрена ему это - ниже 2) если модулю передали что-то не то, то он вернет true и просто не начнет работать. 3) если модулю передали DOM объект, у которого есть метод click() или submit(), то он возвращает false и начинает работать. 4) модуль делает запрос на сервер - авторизован ли пользователь 5) авторизован - имитируем действие пользователя, которое сами же и отменили. То есть кликаем программно по чем он там кликал |
Нахрена я отменяю действие пользователя, а потом имитирую его программно?
Потому как я не знаю как поставить скрипт на паузу, пока выполняется асинхронный запрос(ы) |
| Часовой пояс GMT +3, время: 02:13. |