2012-02-24 8 views
1
<form action ="/submit-page/" method='post' class="editable"> 
    <fieldset> 
    <select name="status" id='status'> 
     <option value="Submitted">Submitted</option> 
     <option value="Canceled">Canceled</option> 
       <option value="Application">Application</option> 
    </select> 
      <input type="submit" name="submit" value="SAVE"> 

</form> 

У меня есть форму выше: Когда я нажимаю на раскрывающееся значение «Отменено» и нажимаю кнопку «Сохранить», я хочу предоставить окно предупреждения с предупреждающим сообщением с кнопкой «Да» и «Нет».jQuery Подтвердить перед отправкой

Если пользователь нажимает «Да», отнесите его на страницу отправки по желанию в параметре действия формы. , если пользователь нажимает «Нет», оставайтесь на одной странице формы без обновления страницы. Можно ли это сделать в jQuery?

+0

вы должны выложили это как ответ :) Я соблазнился ... – mindandmedia

+0

Учебник здесь: [Модальные Подтверждение Диалог по форме Submit] (http://www.jensbits.com/2009/08/10/модальный-подтверждение-диалог-на-форме-Submit-JavaScript-JQuery-щ-и-ThickBox-многообразия /). Он включает простой пример js. –

+0

Вы имеете в виду окно подтверждения, как упомянуто здесь: http://www.w3schools.com/js/js_popup.asp Или что-то вроде: http://forum.jquery.com/topic/jquery-confirm-box –

ответ

6

Хм ... theres проблема с другими ответами здесь: они не работают против вашего HTML.

Там ошибка в JQuery (я предполагаю, что это ошибка), где, если элемент на форме имеет name из submit, затем вызвав submit событие формы не будет работать.

Вам нужно будет удалить атрибут name из вашей кнопки input type="submit" или просто указать ему другое имя, кроме «отправить».

HTML

<form action ="/submit-page/" method='post' class="editable"> 
    <fieldset> 
    <select name="status" id='status'> 
     <option value="Submitted">Submitted</option> 
     <option value="Canceled">Canceled</option> 
     <option value="Application">Application</option> 
    </select> 
    <input type="submit" value="SAVE" name="submit-button"/> 
    </fieldset> 
</form>​ 

JQuery

$('#status').on('change', function() { 

    var $this = $(this), 
     val = $this.val(); 

    if (val === 'Canceled' && confirm("are you sure?")) { 
     $this.closest('form').submit(); 
    } 
});​ 

PHP

$submitted = !empty($_POST['submit-button']); 

if($submitted) 
{ 
    // Submit button was pressed. 
} 
else 
{ 
    // Form was submitted via alternate trigger. 
} 

экзамен PLE

Рабочая: http://jsfiddle.net/xixonia/KW5jp/

не работает: http://jsfiddle.net/xixonia/KW5jp/1/

Редактировать

Вы не так обновили свой вопрос, и этот ответ уже не является допустимым решением для того, что вы находясь в поиске. Вместо этого посмотрите на Chris Platt's answer.

Редактировать Опять

Это модифицированная версия Chris Platt's answer. Он просто ждет, пока DOM не будет готов (элементы загружены), прежде чем он выполнит логику, содержащуюся в первом $(...).

$(function() { // this first jQuery object ensures that... 

    /// ... the code inside executes *after* the DOM is ready. 

    $('form.editable').submit(function(){ 
     if ($('#status').val()=='Canceled') { 
      if (!confirm('Warning message here. Continue?')) { 
       return false; 
      } 
     } 
    }); 

}); 
+0

@ Christopher..если я удаляю имя, как будет проверяться на стороне сервера, что нажата кнопка отправки: например, если i хочу проверить if (! empty ($ _ POST ['submit'])) – newbie

+0

Вы можете просто * изменить * название. Его не нужно полностью удалять. Я обновил свой ответ, чтобы отразить это. –

+0

Я пробовал ответ Криса Платта .. но он не работает на этом сайте: http://srikanthrajan.com/test/ Я пробовал включать различные библиотеки jquery, но он не работает – newbie

0

да, это может быть сделано:

$('#status').change(function(){ 
    var val = $(this).val(); 
    if(val == 'Submitted') { 
    $('.editable').submit(); 
    return false; 
    } else if (val == 'Canceled') 
    { 
     var answer = confirm('are you sure'); 
     return false; 
    } else { 
    ... 
    } 
}); 

В этом, в отличие от решения Крис Pratts сделает это, как только вы измените выбранное значение в раскрывающемся списке. Он сделает это, как только вы нажмете кнопку «Отправить».

1
$('form.editable').submit(function(){ 
    if ($('#status').val()=='Canceled') { 
     if (!confirm('Warning message here. Continue?')) { 
      return false; 
     } 
    } 
}); 
+0

Это это не то, что попросил пользователь. –

+1

Это одна интерпретация того, что пользователь просил. Его название вопроса говорит «после подачи формы». –

+0

спасибо всем .. Решение Chris Pratts кажется идеальным для моей текущей ситуации .. но это не работает. Когда я нажимаю кнопку «Сохранить», он не генерирует предупреждающее сообщение, если статус «Отменен». – newbie

0

Самый прямой способ перехватить формы представления в JQuery, как это:

$("form.editable").submit(function(){ 
    if(confirm("Really submit the form?")) { 
     return true; 
    } else { 
     return false; //form will not be sumitted and page will not reload 
    } 
}); 

См http://jqapi.com/#p=submit более подробно.

Смежные вопросы