Я пишу код для небольшого веб-проекта с помощью 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>
Как будто вся страница обновляется после публикации. с исходными данными.
Это именно то, что происходит. Хотя я не уверен, где вы отправляете запрос POST, так как в вашей form
нет атрибута action
. Но стандартный запрос, не связанный с AJAX, инициированный form
отправляет запрос на сервер, а затем передает ответ с сервера. Если ответ повторится на этой же странице, то эта же страница будет отображаться снова.
JavaScript не будет запоминать состояние предыдущей страницы при загрузке нового ответа. Даже если они являются одной и той же страницей, это два отдельных ответа от сервера. Так...
1) После публикации формы диалоговое окно закрывается самостоятельно, если я не выдаю диалоговое окно ("закрыть") нигде в обработчике кнопки отправки.
Диалог не закрывается. После обновления страницы вы находитесь в совершенно новом контексте страницы. Он не закрылся, в этом контексте он еще не был открыт.
2) Запись имени не добавляется в список.
Нет ничего, что могло бы привести к тому, что это произойдет, когда страница загрузится, поэтому в новом контексте страницы это не произойдет. Ваш серверный код должен будет включать это содержимое в ответ на запрос POST.
Я думаю, что это отражает некоторый фундаментальный недостаток в моем понимании путей JS и хотел бы сначала его очистить, чем просто переключиться на некоторые другие технологии.
В это недоразумение входит тот факт, что AJAX является частью JavaScript. ("J" в "AJAX" означает "JavaScript"). Это не "переход на другую технологию". Он использует возможности технологии, которую вы уже используете. На самом деле все AJAX отправляет запросы и получает ответы на сервер, не обновляя контекст страницы.
Вы не добавляете name
. Оператор конкатенации не является comma
, а a +
в javascript:
$('#selectable').append("<li class='ui-widget-content'>" + name + "</li>");
Затем форма обновляется, потому что вы отправляете форму с помощью $('#form1').submit();
, Если вы не хотите, чтобы страница обновлялась во время отправки, используйте ajax.