Встроенный в это-> JS-> Submit CakePHP работает дважды
Товарищи программисты.
Я только нашел эту ссылку на мою проблему, которая не помогла.
У меня трюбель с тортами phps, встроенными в $this->Js->submit
Что я хочу сделать:
Сайт, на котором запускается моя логика, содержит таблицу с моими данными. На этом сайте у меня также есть несколько элементов, которые содержат формы и открываются модальным окном (диалог jquery ui)
- Вставить объект в базу данных. (за работой)
- Форма, которую я вставляю, находится в модальном диалоговом окне. (за работой)
- Кнопка отправки является изображением. (за работой)
- Перед отправкой формы проверка запускается (работает)
- После отправки формы закройте модальный и поместите новый объект в первую строку таблицы (работает).
Так в чем моя проблема?
Все срабатывает дважды.
** КОД **
Поскольку весь мой другой код, кажется, работает, я вставлю только часть этого кода в $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;
}
'
));
Что я пробовал
- Добавление возвращаемой ложной строки в конце блока кода "success".
- Добавление 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.