2012-03-05 1 views
2

Вот что я хочу сделать -Как поместить обратный вызов в прослушиватель событий отправки формы, чтобы дождаться ответа пользователя на приглашение jquery impromptu?

  • выводил запрос (с использованием экспромтом Jquery), когда пользователь нажимает на кнопку отправки главной формы. Приглашение снова представляет собой форму, в которой есть поле пароля и кнопка «ОК» и «Отмена».
  • Основная форма (вместе с паролем, добавленная к основной форме) публикуется, когда пользователь нажимает кнопку «ОК».
  • Форма не отправляется, если пользователь нажимает кнопку «Отмена».

Подробности
я задал вопрос ранее - jquery form submit() not working inside callback function after preventing normal submit while using impromptu

и смог успешно осуществить то, что я хотел с использованием нативного оперативного метода JavaScript. Но я хочу сделать то же самое, используя импровизированный плагин jquery.

Вот рабочий код, используя родной яваскрипта строки -

$('#frmAddAdnetworkTemplate').submit(function(event){ 


      promptText = "Password required"; 

      postedPassword = prompt(promptText); 

      if(postedPassword) 
      { 
         $("form#frmAddAdnetworkTemplate").find("input#manage_adnetwork_password").val(postedPassword); 
      } 
      else 
      { 
       event.preventDefault(); 

      } 
     }); 

А вот код, который я, хотя до сих пор с помощью экспромтом -

$('#frmAddAdnetworkTemplate').submit(callBackSubmit); 

    function callBackSubmit(event){ 

       $.prompt(passwordForm,{ buttons: { Ok: true, Cancel: function(){event.preventDefault(); } }, submit: submitPasswordPrompt});  

       //how do I call event.preventDefault(); when user cancel’s. 
    //The form gets submitted anayway, it does not wait for the code inside submitPasswordPrompt() to execute. How do I put some callback and make the submit event listener to wait until the user clicks Ok or Cancel? 



      } 

      function submitPasswordPrompt(e, value,m,form) 
      { 
       if(value) 
       { 

        $("form#frmAddAdnetworkTemplate").find("input#manage_adnetwork_password").val(postedPassword); 
    //append the password value in the main form 

       } 
      } 

Но форма получает представленный в любом случае, и я не являюсь как сделать какой-то обратный вызов, чтобы предотвратить представление, пока не ответит на импровизированное приглашение. Он не ждет, как в случае наивного запроса javascript.

Также обратите внимание, что я уже пробовал использовать event.preventDefault в начале и form.submit() позже в моем предыдущем вопросе jquery form submit() not working inside callback function after preventing normal submit while using impromptu. Но в этом случае форма просто не отправляется (ошибка javascript не отображается). Посмотрите, можете ли вы ответить на это.

+0

Анонимная функция, переданная в свойство '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'не имеет никакой переменной" event ", определяющей ее область видимости. Используйте 'console.log (event);' для отладки переменной события. – Stefan

ответ

4

Первое, что нужно заметить, что you've назвал ваш submit button «отправить».Это соответствует form.submit и делает невозможным отправку form.

Наиболее распространенная ошибка при определении формы HTML, что скрипт будет взаимодействовать с вытекает из существования контекстных аксессоров для управления формой. Он должен дать элементу управления NAME (или возможно ID), который соответствует существующему свойству элементов FORM . И наиболее распространенным примером этого является элемент INPUT type = "submit" с NAME "submit". Поскольку именованные элементы управления являются , доступными как именованные свойства элемента FORM, этот элемент INPUT доступен под названием свойства «submit». К сожалению, элементы FORM уже имеют свойство с именем «submit», это метод отправки, который может быть использован для отправки формы со сценарием.

Источник: https://stackoverflow.com/a/3553600/896341

You're даже с помощью плагина Impromptu неправильно и не должны проходить анонимные функции как значения кнопки. Также обратите внимание, что функция submit event handler завершается до функции submit callback от $.prompt().

Этот example демонстрирует поток выполнения и как вы можете предотвратить отправку form.

$('#myForm').on('submit', function(event) { 

    var promptText = "The form will be submitted, continue?"; 

    console.log('Blocking attempt to submit form using preventDefault().'); // DEBUG 
    event.preventDefault(); // Prevent default submit 

    $.prompt(promptText, { 
     buttons : { // Specify buttons and their return value 
      Ok: true, 
      Cancel: false 
     }, 
     submit: function(event, value, message, formVals) { 
      //console.log('submit', event, value, message, formVals); // DEBUG 
      if (value) { 
       console.log('Unbind submit event handler and trigger a submit.'); // DEBUG 
       // Notice that you might want to rebind the event later on. 
       $('#myForm').off('submit').submit(); // Submit form 
      } 
     } 
    }); 

    console.log('This is executed before the submit callback of $.prompt().'); // DEBUG 
}); 
+0

Одинаковая проблема здесь с id = "submit" в поле ввода, только в другом сценарии. Почти невозможно найти причину «e [h] не является функцией». Большое спасибо. –

0

Я не знаю плагина, но знаю, что это замена html для приглашения браузера.

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

Удалите весь код, который у вас есть, в форме отправителя.

Связать обработчик щелчка, чтобы сформировать кнопку отправки и предотвратить удаление кнопки, поэтому форма не отправляется до тех пор, пока вы не сообщите об этом.

В логике плагина, если все в порядке, когда пользователь нажимает кнопку «ОК», вызовите $('#frmAddAdnetworkTemplate').submit()

Если не «OK» вы должны справиться с этим самостоятельно, как к тому, что должно быть сделано с помощью методов плагина.

0

Я думаю, что вы пытаетесь предотвратить действие по умолчанию слишком рано. С вашим кодом ваш клик отменит - предотвратит действие по умолчанию, а затем отправит submitPasswordPrompt. Почему бы не попробовать отправить ложные для отмены затем делать preventDefault логику в вашем представить функцию, как это:

$(function(){ 
       $('#passwordForm').submit(function(){ 

        $.prompt('blah blah',{ buttons: { Ok: true, Cancel:false }, submit: submitPasswordPrompt});  

        console.log('submitted'); 
        return false; // Prevent submit 
       }); 
      }); 

      function submitPasswordPrompt(e, value,m,form) 
      { 
       if(value) 
       { 
        console.log('submittin....'); 
       } else { 
        console.log('its false'); 
        e.preventDefault(); 
       } 
      } 

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

  • Нет связанных вопросов^_^