JQuery форма отправки поведения не понятно

0

Я пишу код для небольшого веб-проекта с помощью js и jquery. В нем, в какой-то момент, нажав кнопку, я создаю диалог. диалоговое окно имеет форму внутри него с полем имени и некоторыми полями. Я должен проверять пользовательские входы и отправлять их на сервер вместе с добавлением поля имени в список в браузере, для интимного пользователя, добавлен еще один элемент. Происходят две странные вещи:

1) После публикации формы диалоговое окно закрывается самостоятельно, если я не выдаю диалоговое окно ("закрыть") нигде в обработчике кнопки отправки.

2) Запись имени не добавляется в список. Как будто вся страница обновляется после отправки. С исходными записями по умолчанию списка имен.

У кого-нибудь есть идеи о том, почему это происходит? Поставил бы какой-то код для вашей помощи. Пожалуйста, не предлагайте вместо этого использовать Ajax. Я думаю, что это отражает некоторый фундаментальный недостаток в моем понимании путей JS и хотел бы сначала его очистить, чем просто переключиться на некоторые другие технологии.

    <div id='dialog' title='Define New Matrix'>
<form name='form1' id='form1'  method='post'>
<fieldset>
    <label for="Name">Name</label>
    <input type='text' name='nameofmatrix' id='Name' class='whitepanes'><br>
    <label for="a11">a11</label>
    <input type="text" name='a11' id='a11' class='whitepanes number-field'><br>
    <label for="a22">a22</label>
    <input type="text" name='a22' id='a22' class='whitepanes number-field'><br>
    <button id='submit_button'>Submit</button>
    <button id='cancel_button'>cancel</button>
</fieldset>
</form>
    <p id='tip' style='color:red;'><i>All fields are required</i></p>
</div>
<script>
    //#button_define is a button on whose clicking the dialog opens. 
            $('#button_define').click(function(){
        $('#dialog').dialog('open');
        $('#tip').html("<p style='color:red; font-size:small'>All fields are      mandatory</p>");
    });

    $('#submit_button,#cancel_button').button();

    $('#cancel_button').on('click',function(){
            $('#dialog').dialog('close');
    });

    $('#submit_button').click(function(event){
        event.preventDefault();
        var name=$('input[name=nameofmatrix]').val();
        //Validate is a function which returns a bool if validation proceeds     correctly
        var isCorrect = Validate();
        if(isCorrect){
        //if validated correctly then add to list

            $('#form1').submit();   
            //$('#dialog').dialog('close');
            $('#selectable').append("<li class='ui-widget-content'>",name,"</li>"); 
        } 

    });
</script>
  • 0
    Вы должны сначала обернуть свой код внутри функции document.ready. Откройте Firebug, чтобы увидеть, какие ошибки появляются в консоли ...
  • 0
    Я завернул это. реальный код и html слишком велики и не имеют отношения к этому вопросу, поэтому размещены только его часть.
Теги:

2 ответа

2
Лучший ответ

Как будто вся страница обновляется после публикации. с исходными данными.

Это именно то, что происходит. Хотя я не уверен, где вы отправляете запрос POST, так как в вашей form нет атрибута action. Но стандартный запрос, не связанный с AJAX, инициированный form отправляет запрос на сервер, а затем передает ответ с сервера. Если ответ повторится на этой же странице, то эта же страница будет отображаться снова.

JavaScript не будет запоминать состояние предыдущей страницы при загрузке нового ответа. Даже если они являются одной и той же страницей, это два отдельных ответа от сервера. Так...

1) После публикации формы диалоговое окно закрывается самостоятельно, если я не выдаю диалоговое окно ("закрыть") нигде в обработчике кнопки отправки.

Диалог не закрывается. После обновления страницы вы находитесь в совершенно новом контексте страницы. Он не закрылся, в этом контексте он еще не был открыт.

2) Запись имени не добавляется в список.

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

Я думаю, что это отражает некоторый фундаментальный недостаток в моем понимании путей JS и хотел бы сначала его очистить, чем просто переключиться на некоторые другие технологии.

В это недоразумение входит тот факт, что AJAX является частью JavaScript. ("J" в "AJAX" означает "JavaScript"). Это не "переход на другую технологию". Он использует возможности технологии, которую вы уже используете. На самом деле все AJAX отправляет запросы и получает ответы на сервер, не обновляя контекст страницы.

  • 0
    Просвещение !! По всем пунктам ... Спасибо за отличный ответ ...
1

Вы не добавляете name. Оператор конкатенации не является comma, а a + в javascript:

$('#selectable').append("<li class='ui-widget-content'>" + name + "</li>");

Затем форма обновляется, потому что вы отправляете форму с помощью $('#form1').submit(); , Если вы не хотите, чтобы страница обновлялась во время отправки, используйте ajax.

  • 0
    ну, вы правы, указывая на приложение. Но это не решает проблему. Даже сейчас после обновления этот аппенд исчез. Так вы говорите, что это обязательно произойдет, и единственный выход - это Ajax? Как люди сохраняют свои доминантные манипуляции тогда без аякса во время представления формы?
  • 0
    они отправляют данные на сервер, сохраняют в сеансе, а затем читают их при обновлении страницы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню