Встроенный в это-> JS-> Submit CakePHP работает дважды

Товарищи программисты.

Я только нашел эту ссылку на мою проблему, которая не помогла.

У меня трюбель с тортами phps, встроенными в $this->Js->submit

Что я хочу сделать:

Сайт, на котором запускается моя логика, содержит таблицу с моими данными. На этом сайте у меня также есть несколько элементов, которые содержат формы и открываются модальным окном (диалог jquery ui)

  1. Вставить объект в базу данных. (за работой)
  2. Форма, которую я вставляю, находится в модальном диалоговом окне. (за работой)
  3. Кнопка отправки является изображением. (за работой)
  4. Перед отправкой формы проверка запускается (работает)
  5. После отправки формы закройте модальный и поместите новый объект в первую строку таблицы (работает).

Так в чем моя проблема?

Все срабатывает дважды.

** КОД **

Поскольку весь мой другой код, кажется, работает, я вставлю только часть этого кода в $this->Js->submit, чтобы вы, ребята, могли сосредоточиться на том, что кажется проблемой.

Если требуется какой-либо другой код, пожалуйста, напишите мне, и я буду рад вставить еще несколько в разделе редактирования.

echo $this->Js->submit(' ', array (
        'label' => 'Send',
        'onsubmit'=>"event.returnValue = false; return false;",
        'div'   => array('class' => 'send_button'), //style submit to be an image
        'url'   => array('controller' => 'records', 'action' => 'append_new_record'),
        'type' => 'json',
        'success' => '
            if (data.success == true) {
                $("#element_add").dialog("close");
                var newLine = data.recordLine;
                $("#content").find("table tbody").find("tr:first").before(newLine);
            }
            else { 
                $("#element_add").html(data.form);
            }
            ',
        'buffer' => false, //true did not help (refreshes the whole web site)
        'before' => '
            if (!checkAdd()) { //validation (custom js function)
                return false;
            }
        '
    ));

Что я пробовал

  1. Добавление возвращаемой ложной строки в конце блока кода "success".
  2. Добавление event.preventDefault() в начале блока кода before.

РЕДАКТИРОВАТЬ1 ЗДЕСЬ Сгенерированный HTML-код

    </script><div class="send_button"><input  id="submit-1182269389" type="submit" value=" "/></div><script type="text/javascript">

$("#submit-1182269389").bind("click", function (event) {$.ajax({beforeSend:function (XMLHttpRequest) {
                if (!checkAdd()) {
                    return false;
                }
            }, data:$("#submit-1182269389").closest("form").serialize(), dataType:"json", label:"Send", onsubmit:"event.returnValue = false; return false;", success:function (data, textStatus) {
                if (data.success == true) {
                    $("#element_add").dialog("close");
                    var newLine = data.recordLine;
                    $("#okno").find("table tbody").find("tr:first").before(newLine);
                }
                else {
                    $("#element_add").html(data.form);
                }
                }, type:"post", url:"\/my_app\/records\/append_new_record"});
return false;});

</script></form>

РЕДАКТИРОВАТЬ 2 1. ПОПРОБУЙТЕ, ЧТО НЕ РАБОТАЕТ

<script type="text/javascript">
    $('#addForm').submit(function(event) {
        event.preventDefault();
    });
</script>

Таким образом, это блокирует весь Ajax (данные добавляются в таблицу после обновления страницы и еще дважды)

1 ответ

Я решил это с помощью хорошего обходного пути, поэтому, если кто-нибудь предоставит информацию о том, почему он так себя ведет, я буду рад.

Мое решение:

  • Добавлен скрытый ввод

    $this->Form->input('submit_type', array('id'=>'add_submit_type', 'type'=>'hidden', 'value'=>0));
    
  • Прежде чем я добавил этот блок кода

    var value = $("#add_submit_type").val();
    if (value == 1) {
        $("#add_submit_type").val("0");
    } else {
        $("#add_submit_type").val("1");
    }
    
  • В моем PHP я не разрешаю создание объекта, если $this->request->data's submit_type == 0.

Другие вопросы по тегам