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, время: 23:38. |