JQuery (или просто JS), выбирающий из нескольких кнопок отправки формы в функции onSubmit - PullRequest
3 голосов
/ 31 марта 2012

У меня есть форма с несколькими кнопками отправки.Один для изменения данных в базе данных, один для добавления и один для удаления.Это выглядит так:

<form action="addform.php" method="post" id="addform" onSubmit="return validate(this)">
<select name="listings" id="listings" size="1" onChange="javascript:updateForm()">
<!-- Here I have a php code that produces the listing menu based on a database query-->
</select>
<br />
Price: <input type="text" name="price" id="price" value="0"/><br />
Remarks:    <textarea name="remarks" wrap="soft" id="remarks"></textarea><br />
<input type="submit" value="Update Database Listing" name="upbtn" id="upbtn" disabled="disabled"/>
<input type="submit" value="Delete Database Listing" name="delbtn" id="delbtn" disabled="disabled"/>
<br />
<input type="submit" value="Add Listing to Database" name="dbbtn" id="dbbtn"/>
<input type="button" value="Update Craigslist Output" name="clbtn" id="clbtn" onClick="javascript:updatePreview();"/>
</form>

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

Я хочу, чтобы она сделала следующее:

    function validate(form){
      if (the 'add new listing' or 'update listing' button was clicked'){
        var valid = "Are you sure the following information is correct?" + '\\n';
        valid += "\\nPrice: $";
        valid += form.price.value;
        valid += "\\nRemarks: ";
        valid += form.remarks.value;
        return confirm(valid);}
      else {
                    return confirm("are you sure you want to delete that listing");
      }
    }

Я предполагаю, что долженЕсть ли способ сделать это относительно легко?

Ответы [ 5 ]

2 голосов
/ 31 марта 2012

Почему бы вам не установить глобальную переменную, определяющую, какая кнопка была нажата последним?Затем вы можете проверить эту переменную в вашем методе validate.Что-то вроде:

var clicked;

$("#upbtn").click(function() {clicked = 'update'});
// $("#delbtn").click(function() {clicked = 'delete'});
// ... 

function validate(form) {
    switch(clicked) {
    case 'update':
        break;
            // more cases here ...
    }
}
1 голос
/ 31 марта 2012

Например, вы можете прикрепить событие click к каждой кнопке отправки, которая сохранит указатель на нее в переменной или пометит ее определенным атрибутом / классом (в этом случае вам придется удалить этот маркер из всех остальных). кнопки отправки в обработчике события), а затем в обратном вызове отправки вы узнаете, какая из них была нажата

0 голосов
/ 31 марта 2012

Вы можете использовать представление ajax с jQuery, вы можете попробовать что-то вроде этого:

$('form#addform input[type="submit"]').on('click',function(e){
        e.preventDefault();
        var current = $(this); //You got here the current clicked button
        var form = current.parents('form');

        $.ajax({
            url:form.attr('action'),
            type:form.attr('method'),
            data:form.serialize(),
            success:function(resp){
                //Do crazy stuff here
            }
        });
});
0 голосов
/ 31 марта 2012

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

0 голосов
/ 31 марта 2012

Я думаю, что проще использовать событие нажатия на каждую кнопку и обрабатывать его индивидуально.

$(function() {
    $('input[name=someName]').click(someFunc);
});

function someFunc() {
    // Your validation code here
    // return false if you want to stop the form submission
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...