Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> добавление обработчика события, ...если предыдущий вернул true 
V
    Опции темы
cia
Дата 22.11.2011, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 15.1.2007

Репутация: нет
Всего: 4



Здравствуйте.
Есть код:
Код

<a href="abv.html" onclick="returm confirm('Continue?');">click me</a>


После него я добавляю ещё события к этой ссылке:
$("a").bind('click',function() {...});

Задача состоит в том, чтобы второй обработчик события выполнялся только в том случае, если предыдущий вернёт true.
Заранее не известно какой именно java-script код будет в первом обработчике (там где confirm), но известно, что указанным выше способом он может отменить стандартную обработку события (перехода по ссылке).

Как это можно сделать?
Спасибо всем, кто попытается помочь  smile .
PM WWW ICQ   Вверх
-=Ustas=-
Дата 23.11.2011, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



cia, можно сделать например так:
Код

function myConfirm( question, fn_not, fn_yes )
{
    var res = confirm( question );
    
    return ( ( res ) ? ( fn_yes.call() ) : ( fn_not.call() ) );
};


Код

<a href="abv.html" onclick="returm myConfirm('Continue?', function(){return (false);}, function(){return (true);});">click me</a>



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
ksnk
Дата 23.11.2011, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Вот такой вот забавный хак может сработать
Код

$(function(){
    var $a=$('a'),
          x=$a.attr('onclick');
    if(!x) return;
    if(typeof(x)=='string') x=new Function(x);
    $a.removeAttr('onclick').click(function(e){
        if(x()){
            alert(1);return true;
        }
        else {
            return false;
        }
    });
})

Основной смысл - смотрим на установленный атрибут onclick и выкидываем его. В новом обработчике клика вызываем функцию, построенную на значении атрибута и подписываем к нему нужные действия.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
cia
Дата 23.11.2011, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 15.1.2007

Репутация: нет
Всего: 4



-=Ustas=-, я уже говорил, что заранее не известно какой именно будет код в первом обработчике события, функция confirm - это только для примера, поэтому так сделать не получится.

ksnk, этот хак вполне рабочий, спасибо.

Мне в голову только что пришла ещё одна мысль...
Какой код будет добавлен во втором обработчике заранее известно, поэтому я могу написать так:
$('a').attr('href',function() {
    return 'javascript:jQuery.adminDialog.load("'+this.href+'")';
});
При этом при наведении курсора на ссылку в браузере, хоть и не так красиво, но всё же можно видеть адрес ссылки.

Проверил - это работает.
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.