2016-01-28 9 views
-1

открыть диалог мой с помощью кнопки затем поместить мой курсор в поле ввода и прессы введите свои диалоговые закрывается и эта строка вставляется в адресную строку:диалоговое окно JQuery UI закрывается ввести в поле ввода

Address bar

JQuery:

$('#dialog').load("form-incident.php").dialog({ 
    title: "Add Incident", 
    autoOpen: false, 
    resizable: false, 
    width: 800, 
    modal:true, 
    position: ['center', 'top+50'], 
    buttons: { 
     Add: function(){ 
      $.ajax({ 
       url  : 'save.php', 
       type : 'POST', 
       data : $('form').serialize(), 
       context: $(this), 
       success: function (result) { 
        if (result === "true") { 
         alert('Incident has been added successfully'); 
        } else { 
         alert('ERROR: Cannot insert data to MySQL table'); 
        } 
        window.location.reload(); 
        $(this).dialog("close"); 
       }, 
       error : function(){ 
        alert('ERROR: Check database connection'); 
       } 
      }); 
     }, 
     Cancel: function() { 
      $(this).dialog("close"); 
     } 
    } 
}); 

форм-incident.php:

<form> 
    Name: <input type="text" name="name" id="name"><br><br> 
    Project: 
    <select name="project" id="project"> 
     <option value="test">Test</option> 
    </select><br><br> 
    Incident:<br> <textarea name="incident" id="incident" style="resize:none; width: 100%;" rows="14" cols="94"></textarea> 
</form> 

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

+1

Не видя обработанную разметку, которые образуют-incident.php возвращается, я не могу сказать наверняка. Но, я предполагаю, что включает форму (с методом 'get', так как вы видите значения querystring, добавленные в ваш URL-адрес). Все браузеры автоматически отправляют форму, если вход имеет фокус, и пользователь нажимает кнопку ввода. И если форма настроена на отправку самому себе, когда она отправлена, она перезагружает страницу. Вы можете обработать событие отправки и вызвать preventDefault() на нем. Но я не уверен, что вы подразумеваете под «но все же реагирует, чтобы войти, если были какие-то предложения раньше, когда форма была заполнена». – Elezar

+0

@Elezar Спасибо за ваш ответ, если я вызываю диалог preventDefault() для отправки сообщения о завершении, и строка запроса вставляется в адресную строку. Я также попытался установить событие keyCode, но тогда я не могу использовать enter, если есть какие-либо предложения, когда я должен заполнить поле ввода. – Madsen

+0

Хорошо, здесь есть что-то еще. У вас нет кнопки отправки внутри этой формы, поэтому нажатие Enter не должно даже отправлять ее. Это все равно похоже на представление формы, хотя, поскольку единственный другой способ, я мог думать, что Enter приведет к навигации через явный код. Может быть, есть другой элемент формы где-то на странице, что весь диалог внутри? – Elezar

ответ

0

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

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

Я собрал скрипку с фрагментами кода сверху и смог воспроизвести проблему. Как только я положил в preventDefault(), это прекратилось. Проверьте его и посмотрите, как он отличается от вашего кода в реальном времени.

https://jsfiddle.net/elezar/u0sfx22p/2/

+0

Он работает с 'preventDefault()', но если я загружаю форму из другого файла, она не работает. – Madsen

+0

Ну, да. Вам нужно будет обработать событие отправки и вызвать 'preventDefault()' на каждой странице, которая включает форму. Кроме того, вы можете добавить код, чтобы сделать это на странице, на которой находится форма. Это заставит его работать везде, где оно включено, но это также означает, что вы не можете отправить какую-либо форму на любую страницу, где она включена. Вы можете обойти это, указав эту конкретную форму как идентификатор, а затем привязавшись к событию 'submit' только на этом. См. Мою [обновленную скрипту] (https://jsfiddle.net/elezar/u0sfx22p/4/) для примера. – Elezar

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

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