[JS]function a(){ $("button1").click(function(){ return true; }); $("button2").click(function(){ return false; }); return ТРУ или ФАЛС В ЗАВИСИМОСТИ ОТ НАЖАТОЙ КНОПКИ button1 ИЛИ button2 }[/JS] как сделать чтобы ф-ия a() возвращала true или false в зависимости от нажатой кнопки (button1 или button2)? :help:
я обычно по js не советую , но как ты собираешься отслеживать клик в ф-ции которая выполнится один раз и сразу же ? а если 3 кнопки ? делай переключателем - для теста впихни input hidden , на требуемые кнопки расставь онклик изменение значение хайдена на true и false , в самой ф-ции уже проверка hidden.val() или даже return hidden.val() - тогда хоть кнопки одним классом называй и по нему проверй click(), который разумеется должен находится вне ф-ции
вообще мне нужно сделать prompt() чтобы работало так: [js]r=promptNew("да или нет"); if (r==true) alert (r); else alert(r);[/js]
я так понимаю, что при нажатии "да" или "нет" будут вызываться разные функции? если так, то тогда лучше всего и сделать обработчики при разных кликах [js] $("button1").click(function(){ yeh(); }); $("button2").click(function(){ none(); }); [/js]
проблемма в том что у меня много prompt() и мне бы не хотелось ковыряться в коде и менять там все руками, аот поэтому я и хочу создать ф-ию - копию prompt() чтобы автозаменой заменить все prompt() на prompt2()
Мне кажется, не прокатит такое. Может быть просто я чего не знаю, конечно, но по-моему, это невозможно сделать. Нужно переписывать всё или оставить стандартный prompt()...
омг, qwert_ukg, эка ж тебя закрутило-то! Разъясняю. Конструкция типа $('lalala').click(function...) не нажимает и не обрабатывает, атолько навешивает обработчик на элемент лалала на событие клика. Т.е. ты можешь сразу вешать одну функцию на обе кнопки а внутри смотреть чтонить типа this.name или $(this).name или как-то так, вобщем глянь в гугле
говнокод решение [js] var result = null; $("button1").click(function(){ result = true; }); $("button2").click(function(){ result = false; }); function a(){ result = null; while (result == null) {}; return result; }[/js]
MiksIr, действительно ужс =D автор,не понимаю в чём проблема отслеживать событие вне ф-ции и отправлять в ф-цию (под отслеживать я подразумеваю тупой онклик)
ну ладно , я такой говноодер что prompt никогда не юзал , но мы разве в 2000 году когда альтернатив небыло ? да на Jquery любое модальное окно делается с лёгкостью , с такой же лёгкостью отслеживаются клики и всё остальное , зачем придумывать велосипед на том что себя изжило? никто так сейчас не делает
Ты не понимаешь. Тут блокирующая модель (синхронная) vs событийная (асинхронная). Стандартный prompt - блокирующая. Все события - асинхронная.
Ща от меня шквал тупых вопросов =) Блокирующая - юзер ничего не может сделать кроме ввода текста в модальное окно и нажатия на ок/отмена ? на то оно и модальное. Но что означает синхронная ? мне почему-то не понятно =( что хочет отслеживать автор ? нажатия на ок/отмена или другие кнопки (button1/2) ? если ok/отмена , то с ними и работать если кнопки во время prompt , то как юзер их нажмёт ? если просто кнопки , то при чём тут prompt ? короче меня понесло, я не пойму чего добивается автор и почему нельза сделать это асинхронно , хоть я и дуралей не понимающий разницы между синхронно/асинхронно =D
Речь не об юзере, а о рантайме программы. У prompt ты вызвал эту функцию из своего кода - и выполнение заблокировалось. Юзер нажал кнопку - prompt вернул значение и выполнение кода продолжилось. Асинхронная работа - это когда вызов и получение результата не связаны. Вызвал функцию, она что-то отрисовала и вернулась... код пошел выполнятся дальше (от юзера ответа еще нет). Что бы тут получить ответ - используют калбек, т.е. из одной функции вызвал и указал вторую, которую нужно вызвать, когда от юзера придет ответ. Т.е. разные модели, и в коде одну модель на другую заменой названия функции не поменять. Только если применять всякие говнокоды типа что я написал - т.е. блокировать работу в вызванной функции методом бесконечного цикла.
Это, я думаю, ещё хуже чем написать большими яркими буквами при входе на сайт, что для работы с сайтом необходимо разрешить алерты и промты в браузере while(true) {} остановит вообще выполнение любого JS кода на странице через секунд 5 где-то. Вернее браузер скажет, что на странице какой-то говёный скрипт выносит ему мозг и скажет пользователю, что он хочет отключить JS для этой страницы. Ну и тормоза будут.
Ну promt тоже остановит выполнение =) А вот браузер ругаться будет, да. Возможно есть и другие способы блокирования, тут уж не знаю - никогда этим не интересовался. Можно посмотреть реализацию в jQuery.ajax - там есть флаг для синхронного режима.
Там есть такой флаг потому, как он есть во встроенном в браузеры XMLHttpRequest - объекте. Это только при запросе к серверу можно поставить синхронный режим, и выполнение любого кода будет остановлено, пока не придёт ответ от сервера.
Всем спасибо! перекапал весь код, заменил все prompt и confirm. пришлось использовать cfllback таккак igordata сразу сказал а() запустится повешает обработчик на сабытия и возвратит false еще до того как браузер успеет отрисовать 2 кнопки и окно) использовал это http://webmasters.by/articles/web-p...-confirm-and-prompt-dialogs-replacements.html