За последние 24 часа нас посетили 34416 программистов и 1693 робота. Сейчас ищут 683 программиста ...

Функция в функции

Тема в разделе "JavaScript и AJAX", создана пользователем qwert_ukg, 28 окт 2011.

  1. qwert_ukg

    qwert_ukg Активный пользователь

    С нами с:
    20 июл 2010
    Сообщения:
    387
    Симпатии:
    0
    Адрес:
    Алмата
    [JS]function a(){
    $("button1").click(function(){
    return true;
    });
    $("button2").click(function(){
    return false;
    });
    return ТРУ или ФАЛС В ЗАВИСИМОСТИ ОТ НАЖАТОЙ КНОПКИ button1 ИЛИ button2
    }[/JS]
    как сделать чтобы ф-ия a() возвращала true или false в зависимости от нажатой кнопки (button1 или button2)? :help:
     
  2. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    я обычно по js не советую , но как ты собираешься отслеживать клик в ф-ции которая выполнится один раз и сразу же ? а если 3 кнопки ?
    делай переключателем - для теста впихни input hidden , на требуемые кнопки расставь онклик изменение значение хайдена на true и false , в самой ф-ции уже проверка hidden.val() или даже return hidden.val() - тогда хоть кнопки одним классом называй и по нему проверй click(), который разумеется должен находится вне ф-ции
     
  3. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    не очень понятно, я считаю.
    дайте код где эта функция будет вызываться.
     
  4. qwert_ukg

    qwert_ukg Активный пользователь

    С нами с:
    20 июл 2010
    Сообщения:
    387
    Симпатии:
    0
    Адрес:
    Алмата
    вообще мне нужно сделать prompt()
    чтобы работало так:
    [js]r=promptNew("да или нет");
    if (r==true) alert (r);
    else alert(r);[/js]
     
  5. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    я так понимаю, что при нажатии "да" или "нет" будут вызываться разные функции? если так, то тогда лучше всего и сделать обработчики при разных кликах
    [js]
    $("button1").click(function(){
    yeh();
    });
    $("button2").click(function(){
    none();
    });
    [/js]
     
  6. qwert_ukg

    qwert_ukg Активный пользователь

    С нами с:
    20 июл 2010
    Сообщения:
    387
    Симпатии:
    0
    Адрес:
    Алмата
    проблемма в том что у меня много prompt() и мне бы не хотелось ковыряться в коде и менять там все руками, аот поэтому я и хочу создать ф-ию - копию prompt() чтобы автозаменой заменить все prompt() на prompt2()
     
  7. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Мне кажется, не прокатит такое. Может быть просто я чего не знаю, конечно, но по-моему, это невозможно сделать. Нужно переписывать всё или оставить стандартный prompt()...
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    омг, qwert_ukg, эка ж тебя закрутило-то!

    Разъясняю. Конструкция типа $('lalala').click(function...) не нажимает и не обрабатывает, атолько навешивает обработчик на элемент лалала на событие клика. Т.е. ты можешь сразу вешать одну функцию на обе кнопки а внутри смотреть чтонить типа this.name или $(this).name или как-то так, вобщем глянь в гугле
     
  9. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    говнокод решение
    [js]
    var result = null;

    $("button1").click(function(){
    result = true;
    });

    $("button2").click(function(){
    result = false;
    });

    function a(){
    result = null;
    while (result == null) {};
    return result;
    }[/js]
     
  10. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    MiksIr, действительно ужс =D
    автор,не понимаю в чём проблема отслеживать событие вне ф-ции и отправлять в ф-цию (под отслеживать я подразумеваю тупой онклик)
     
  11. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    он хочет тупо заменить prompt... а так не получится - придется все на калбеки переписывать
     
  12. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    ну ладно , я такой говноодер что prompt никогда не юзал , но мы разве в 2000 году когда альтернатив небыло ? да на Jquery любое модальное окно делается с лёгкостью , с такой же лёгкостью отслеживаются клики и всё остальное , зачем придумывать велосипед на том что себя изжило? никто так сейчас не делает
     
  13. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Ты не понимаешь. Тут блокирующая модель (синхронная) vs событийная (асинхронная). Стандартный prompt - блокирующая. Все события - асинхронная.
     
  14. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    Ща от меня шквал тупых вопросов =)
    Блокирующая - юзер ничего не может сделать кроме ввода текста в модальное окно и нажатия на ок/отмена ? на то оно и модальное. Но что означает синхронная ? мне почему-то не понятно =(
    что хочет отслеживать автор ? нажатия на ок/отмена или другие кнопки (button1/2) ? если ok/отмена , то
    с ними и работать
    если кнопки во время prompt , то как юзер их нажмёт ?
    если просто кнопки , то при чём тут prompt ?
    короче меня понесло, я не пойму чего добивается автор и почему нельза сделать это асинхронно , хоть я и дуралей не понимающий разницы между синхронно/асинхронно =D
     
  15. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Речь не об юзере, а о рантайме программы. У prompt ты вызвал эту функцию из своего кода - и выполнение заблокировалось. Юзер нажал кнопку - prompt вернул значение и выполнение кода продолжилось.

    Асинхронная работа - это когда вызов и получение результата не связаны. Вызвал функцию, она что-то отрисовала и вернулась... код пошел выполнятся дальше (от юзера ответа еще нет). Что бы тут получить ответ - используют калбек, т.е. из одной функции вызвал и указал вторую, которую нужно вызвать, когда от юзера придет ответ.

    Т.е. разные модели, и в коде одну модель на другую заменой названия функции не поменять. Только если применять всякие говнокоды типа что я написал - т.е. блокировать работу в вызванной функции методом бесконечного цикла.
     
  16. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Это, я думаю, ещё хуже чем написать большими яркими буквами при входе на сайт, что для работы с сайтом необходимо разрешить алерты и промты в браузере :)
    while(true) {} остановит вообще выполнение любого JS кода на странице через секунд 5 где-то. Вернее браузер скажет, что на странице какой-то говёный скрипт выносит ему мозг и скажет пользователю, что он хочет отключить JS для этой страницы. Ну и тормоза будут.
     
  17. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Ну promt тоже остановит выполнение =) А вот браузер ругаться будет, да. Возможно есть и другие способы блокирования, тут уж не знаю - никогда этим не интересовался. Можно посмотреть реализацию в jQuery.ajax - там есть флаг для синхронного режима.
     
  18. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Там есть такой флаг потому, как он есть во встроенном в браузеры XMLHttpRequest - объекте. Это только при запросе к серверу можно поставить синхронный режим, и выполнение любого кода будет остановлено, пока не придёт ответ от сервера.
     
  19. qwert_ukg

    qwert_ukg Активный пользователь

    С нами с:
    20 июл 2010
    Сообщения:
    387
    Симпатии:
    0
    Адрес:
    Алмата
    Всем спасибо! перекапал весь код, заменил все prompt и confirm. пришлось использовать cfllback таккак igordata сразу сказал а() запустится повешает обработчик на сабытия и возвратит false еще до того как браузер успеет отрисовать 2 кнопки и окно)
    использовал это http://webmasters.by/articles/web-p...-confirm-and-prompt-dialogs-replacements.html