2015-03-08 4 views
0

У меня есть форма с несколькими элементами и двумя кнопками отправки: СОХРАНИТЬ И УДАЛИТЬ. При отправке формы через jQuery ajax мне нужно знать, нажал ли пользователь DELETE, чтобы я мог выполнить код соответствующим образом. Проблема в том, что jQuery не отправляет имя и значение отправки. Итак, я прочитал здесь и нашел, что это похоже на идеальное обходное решение: используйте для SAVE и кнопку DELETE. С помощью кнопки DELETE я могу отправить форму с именем и значением кнопки, поэтому выполните код для удаления. Проблема в том, что я пытаюсь связать куски вместе без успеха. Вот мой код:jQuery: ajax, кнопка отправки, которая была нажата

HTML:

<form id="f-release" method="post" action="includes/submit_release.php"> 
    <fieldset> 
     <input name="save" type="submit" value="save"> 
     <button name="delete" type="button" value="delete" onClick="return confirm('Do you really wish to permanently delete the record?')">Delete</button> 
    </fieldset> 
</form> 

Аякса:

$("form button[name=delete]").click(function() { 
    var formData = $(this).closest('form').serializeArray(); 
    formData.push({name: this.name, value:this.value }); 
}); 

$('form#f-release').submit(function(event) { 
    event.preventDefault(); 

    var form = $(this); 

    $.ajax({ 
     type: form.attr('method'), 
     url: form.attr('action'), 
     data: form.serialize(), 
     dataType: "json" 
    }).done(function(data) { 

     alert('done'); 

    }).fail(function(data) { 

     alert('error!'); 

    }); 
}); 

PHP:

if (isset($_POST['releaseid']) && is_numeric($_POST['releaseid'])) { 

    // save 

} elseif (...delete...) { 

    //delete 

} 

Когда я нажимаю удалить, как я отправить форму с именем и значение кнопки удаления, чтобы я мог правильно выполнить код php DELETE?

+0

использовать атрибуты данных? – a7omiton

+0

Вы могли бы сформулировать? – Marco

ответ

2

Есть несколько вариантов, вы можете рассмотреть следующие вопросы:

  1. Обычно не используется метод POST, чтобы удалить запись, вы должны использовать УДАЛИТЬ метод. Затем в вашем php-коде определите, что должно делать служба на основе метода http. (Я не знаком с PHP, но я считаю, что это возможно, увидеть этот пост Detecting request type in PHP (GET, POST, PUT or DELETE))

  2. Если вы действительно должны использовать метод POST для удаления, то вы можете иметь скрытый вход:

    < вход тип = «скрытый» имя = «метод» значение = «отправить» >

тогда, когда пользователь нажимает кнопку удаления, установите значение «удалить», когда пользователь нажимает кнопку отправки, установите значение «представить »(или сохранить его нетронутым, так как я установил его значение по умолчанию для« submit »). Это должно позволить вашему php-коду принимать решения на основе $ _POST ['method']

+0

Я понятия не имел, что метод DELETE существует в PHP. Это упрощает многое. благодаря – Marco

1

Вы можете сохранить удаление и отправить как входные данные или кнопки, это не имеет особого значения. Но они могут быть одного элемента.

Есть несколько способов справиться с этим:

** создают идентификаторы для delete и submit элементов.

** затем создать встроенный обработчик щелчка, как это:

<button id="save" onClick="reply_click(this.id)">Save</button> 
<button id="delete" onClick="reply_click(this.id)">Delete</button> 

<script type="text/javascript"> 
function reply_click(clicked_id) 
{ 
    // whatever code here... 
    // clicked_id will refer to the ID that was clicked 
    console.log(clicked_id); // try this 
} 
</script> 

В качестве альтернативы, если вы предпочитаете принимать более чистый подход, который разделяет озабоченность, и не обрабатывает поведение в HTML , вы можете попробовать что-то вроде этого:

** создать идентификаторы для delete и submit элементов.

** затем прокрутите каждый из соответствующих элементов и присоедините обработчик событий, который вернет определенный идентификатор, когда будет нажат. Это выглядит следующим образом:

var element = document.querySelectorAll('button'); 
      var elementLength = element.length; 
      for(var i = 0; i < elementLength; i++){ 
       element[i].addEventListener('click', function(){ 
        console.log(this.id); 
       }); 
      } 

Если вы хотите палки JQuery:

** создать идентификаторы для delete и submit элементов.

**, то вы можете сделать что-то вроде этого:

$('button').click(function (event) { 
    var currentId = event.target.id; 
    // do stuff with currentId 
}); 

[Примечание: этот ответ адресует обнаружение, где ваши события кликов приходят из, но не конкретно разработки вашего вызова AJAX. Я понимаю, что это касается того, о чем вы спрашивали.]