На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> Какую кнопку нажали? , JavaScript
    Ситуация следующая:
    ExpandedWrap disabled
      <form ... onSubmit="return validate(this);">
      ...
      <input name="Create" type="submit" value="Создать">
      <input name="Delete" type="submit" value="Удалить">
      </form>

    Так вот, как в функции validate определить какую кнопку нажали? <_<
      :no: Неправильный подход к решению вопроса. Лучше создать кнопки button с разными обработчиками, и в них form.submit() вызвать автоматически:
      ExpandedWrap disabled
        <form name="the_form" ...>
        <input type="button" name="create" value="Создать" onClick="create()">
        <input type="button" name="delete" value="Удалить" onClick="delete()">
        </form>

      Так что выкладывай задачу (и код ф-и validate) полностью, для получения конечного результата ;)
        Trustmaster, а так?
        Вариант #1.
        ExpandedWrap disabled
          <form ... onSubmit="return validate(this, btn);">
          <script>var btn;</script>
          ...
          <input name="Create" type="submit" value="Создать" onclick="btn = 'create'" />
          <input name="Delete" type="submit" value="Удалить" onclick="btn = 'delate'" />
           
          </form>

        В итоге передастся вторым параметром обзЫвание кнопки.

        Вариант #2
        ExpandedWrap disabled
          <form ... onSubmit="return validate(this, document.getElementById('btn').value);">
          <input type="hidden" name="btn" value="" id="btn" />
          ...
          <input name="Create" type="submit" value="Создать" onclick="document.getElementById('btn').value = 'create'" />
          <input name="Delete" type="submit" value="Удалить" onclick="document.getElementById('btn').value = 'delete'" />
           
          </form>

        Результат в принципе тот-же, но и скрипту передасться "кличка" кнопки.
          Ну тогда уж
          ExpandedWrap disabled
            <form ... onSubmit="return validate(this);">
            ...
            <input name="Create" type="submit" value="Создать" onclick="var btn = 'create';" />
            <input name="Delete" type="submit" value="Удалить" onclick="var btn = 'delate';" />
            ...
            </form>

          btn объявлена в глобально области видимости и видна из validate().
            Trustmaster, чужой код надо читать внимательно >:(
            Смотри вариант №1, строка №2
            А глобальные переменные в функциях нелюблю использовать :no:
              :offtop: Читал внимательно :) Просто так, имхо, короче. А вообще, тут от предпочтения salaga'и зависит, и от того, какую задачу эта функция решает. Мне интуиция подсказывает, что неправильным путем пошли товарищи :)
                Спасибо, за совет. Я наверное, не так попросил :unsure:
                Есть ли какое-нибудь свойство, например - у кнопки-submit, указывающее на нажатие. По идее, отправляемые данные формы содержат запись вида "Create"=>"Создать", если нажата кнопка Create: можно посмотреть там. Но вот где они хранятся?
                Цитата
                Trustmaster, 10.09.04, 19:11
                Так что выкладывай задачу (и код ф-и validate) полностью, для получения конечного результата

                Суть в том, чтобы данные отправленные формой содержали запись о кнопке и чтобы ф-ия validate спросила: "А надо-ли?" :) Отправляю post'ом.
                  То есть о названии кнопки нужно сообщить скрипту?

                  Чтобы validate спросила, надо ли отправить форму, делаем так:
                  ExpandedWrap disabled
                    <script>function validate(obj) {
                    // ...
                    return confirm('Надо ли отправлять форму?');
                    }</script>
                     
                    <form ... onSubmit="return validate(this);">
                    ...
                    <input name="Create" type="submit" value="Создать">
                    <input name="Delete" type="submit" value="Удалить">
                    </form>

                  А вот насчет передачи name кнопки submit я не уверен. На каком языке скрипт-обработчик?
                    На PHP. Но ведь не принципиально на чем обработчик, главное то, что передалось, сами данные. Т.е. все определяется на стороне клиента. Интересно как отправляет данные форма?
                    Кстати, спасибо, что стараешься помочь.
                      Как отправляет данные форма? Сначала вебсерверу, а тот - скрипту через стандартный поток ввода (это методом POST). При этом аттрибуты name становятся именем переменной, а значение поля - значением переменной. На сколько мне известно, поля типа submit не отправляются, поэтому чтобы узнать, с какой же кнопки форму послали, функции validate придется задать значение hidden поля:
                      ExpandedWrap disabled
                        <script>function validate(obj, btn) {
                        // ...
                        document.forms['the_form'].item('submit_btn').value = btn;
                        if(confirm('Надо ли отправлять форму?')) {
                        document.forms['the_form'].submit();
                        }
                        }</script>
                         
                        <form name="the_form" ...>
                        ...
                        <input type="hidden" name="submit_btn" value="" />
                        <input name="Create" type="submit" value="Создать" onclick="validate(this, 'create')" />
                        <input name="Delete" type="submit" value="Удалить" onclick="validate(this, 'delete')" />
                        ...
                        </form>


                      PHP-скрипт получит переменную $_POST['submit_btn'] (и $submit_btn при register_globals = On), содержащую имя кнопки.
                        Цитата
                        Trustmaster, 11.09.04, 14:07
                        На сколько мне известно, поля типа submit не отправляются

                        Еще как оптравляются :) Слушай:
                        ExpandedWrap disabled
                          <form method="post">
                          <input type="submit" name="Create" value="Создать">
                          <input type="submit" name="Delete" value="Удалить">
                          </form>

                        Обработчик:
                        ExpandedWrap disabled
                          print_r($_POST);

                        Вывод:
                        Array
                        {
                        [Create] => Создать
                        }
                        Отправилась только нажатая кнопка. Ничего не передастся, если в onClick вставить self.submit();
                        Мне не нравится вводить новые переменные, если есть старые. Где то же записывается, что отправит форма вебсерверу? Т.е. записывается, что будет отправлен "Create" или не будет.
                          Научись задавать вопросы по-нормальному, OK? А то первые несколько минут приходится въезжать, что же такое ты спрашиваешь.

                          Насколько я понял, на этот раз ты хочешь, чтобы за все отвечала одна переменная? Нет проблем:
                          ExpandedWrap disabled
                            <form method="post">
                            <input type="submit" name="submit_action" value="Создать">
                            <input type="submit" name="submit_action" value="Удалить">
                            </form>


                          А если тебе надо узнать, что одна кнопка была нажата, а другая нет, то тут уж submit точно не подойдет. Тогда в любом случае придется воспользоваться button + javascript:
                          ExpandedWrap disabled
                            <script>function validate(obj, btn) {
                            // ...
                            if(btn == 'create')
                              document.forms['the_form'].item('Create').value = 'Yes';
                            else
                              document.forms['the_form'].item('Delete').value = 'Yes';
                            if(confirm('Надо ли отправлять форму?')) {
                            document.forms['the_form'].submit();
                            }
                            }</script>
                             
                            <form name="the_form" ...>
                            ...
                            <input type="hidden" name="Create" value="No" />
                            <input type="hidden" name="Delete" value="No" />
                            <input type="submit" value="Создать" onclick="validate(this, 'create')" />
                            <input type="submit" value="Удалить" onclick="validate(this, 'delete')" />
                            ...
                            </form>
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0388 ]   [ 15 queries used ]   [ Generated: 27.04.24, 17:39 GMT ]