#jquery-ui #forms #dialog #fadeout
#jquery-пользовательский интерфейс #формы #диалоговое окно #исчезновение
Вопрос:
Сценарий: Использование плагина формы jquery. Форма появляется в диалоговом окне, созданном с помощью пользовательского интерфейса jquery. После нажатия кнопки отправить в форме появляется сообщение об успешном завершении. Что я хотел бы сделать, так это отключить диалоговое окно после появления сообщения об успешном завершении.
Проблема: мне неясно, как структурировать код для успешного завершения и куда поместить код.
В следующем я попытался добавить «функцию успешного завершения» в скрипт, который запускается при нажатии на отправку формы следующим образом:
$(document).ready(function() {
var options = {
target : '#output1',
url: 'comments.php',
clearForm: 'true',
success: function {
$dialog.dialog('close');
}
};
// bind 'myForm' and provide a simple callback function
$('#brokenLinks').ajaxForm(options);
return false;
});
Однако это приводит к прерыванию работы скрипта, и нажатие кнопки отправки приводит к загрузке php-скрипта с сообщением об успешном завершении в окне, в отличие от желаемого поведения пребывания на странице формы.
Кто-нибудь может указать мне на примеры того, как отключить диалоговое окно после отправки формы, или предложить, как это должно быть спроектировано.
Спасибо.
Дополнительный код
ФОРМА
</p>
<p>
<input name="nowhere" value="linknowhere" type="radio">Link is
broken and doesn't go anywhere
</p>
<p>
<input name="wrong_url" value="linktowrongurl" type="radio">Link
goes to an unexpected destination
</p>
<p>
<input name="other" value="linkother" type="radio">Other -
Please explain in the description box below
</p>
<em>Description</em>
<p>Please add as much descripton as you can about the problem you
noticed</p>
<textarea class="tagged" name="description" id="area" cols="50" rows="10" title="Please add as much description as you can."></textarea>
<p>
Page Address: <br> <input name="url" value="" id="targetURL" size="100" title="Page Address" type="text">
</p>
<p>
Browser<input name="browser" value="Firefox" type="text">
</p>
<p>
Operating System<input name="operating_system" value="MacOSX" type="text">
</p>
<p>
<input name="submit" id="button" value="Submit" type="submit">
</p>
</fieldset>
</form>
<!-- server response -->
<h2 class="testColor">Output Response</h2>
<div id="output1" class="testColor">
</div>
<!--End broken links FORM-->
Сценарий генерации диалогового окна
$(document).ready(function() {
$('#target a').each(function() {
var $link = $(this);
var $dialog = $('<div></div>')
.load($link.attr('href'))
.dialog({
autoOpen: false,
title: $link.attr('title'),
width: 700,
height: 800,
modal: true,
open: function (event,ui) {
$("input[name='url']").val(pageAddress);
}
});
$link.click(function() {
$dialog.dialog('open');
$( "#accordion" ).accordion({
collapsible: true,
active: false
});
return false;
});
});
});
Главная страница
<!-- Checks for presence of cookie. If present sets a php flag to indicate that cookie is present. This flag is read into Javascript in another script -->
<script type="text/javascript">
var readerStatus="tester";
if (readerStatus=="tester") {
$(function() {
$( "#dialog" ).dialog();
});
};
</script><!-- If tester flag is set then show the feedback button -->
<script type="text/javascript">
var pageAddress="http://localhost/Formdev/rc2feedbackform/page3_blogpage1.php";
</script><!-- Reads the url of the page and stores it as a Javascript variable -->
</head>
<body>
<div id="dialog" title="Feedback Button">
<div title="Feedback Form">
<p id='target'><a href="feedbackform.php" title='Feedback Form' >Click Here For Feedback Form</a></p>
<p class="notes">This form is dragable and resizable</p>
</div>
</div><!-- This is the text for the tester button -->
<!--------------------------------------------------------------------------->
<!-- Start The Page Display -->
<h1>Page 1 Of The Blog</h1>
<p class="blueborder textColor">This page simulates the page on the blog where testers will land. A button appears on this page with the title feedback form. Click on the button and the feedback form will appear. You can then complete the form. When you are done click on the submit button. If the forms is successfully recorded you will see a message telling you its been recoreded. </p>
</body>
Ответ №1:
Вы должны отправить форму с помощью ajax, чтобы предотвратить загрузку новой страницы. затем используйте обратный вызов в функции ajax для выполнения .fadeout() в div / form
редактировать: я неправильно понял вопрос. вероятно, может помочь, если вы покажете функцию, вызываемую при нажатии кнопки отправки / входа
Комментарии:
1. Спасибо за ваш ответ. Показанный скрипт обрабатывает отправку. Мое дополнение — это функция в конце списка опций. успех: функция {$dialog.dialog(‘закрыть’)}. Я пытался изложить это кратко, но, возможно, это слишком лаконично. Если это поможет увидеть полный контекст, включая страницу, сценарий диалога и страницу формы, пожалуйста, дайте мне знать. Спасибо.
2. покажите больше кода. включая форму и ее контейнер.
3. я думаю, проблема в этой строке $dialog.dialog(‘закрыть’); вероятно, должно быть $ (dialog). dialog (‘закрыть’); если это не сработает, я бы назначил идентификатор div, который содержит все диалоговое окно, затем выполните это $ (‘#div_id’).hide(); строка кода находится в правильном месте, хотя она просто не находит диалоговое окно, потому что ссылки неверны
4. Спасибо. Я добавил дополнительный код, стараясь не перегружать. Тем временем я буду работать над вашими предложениями.
5. Ах, я вижу одну проблему благодаря вашим комментариям. $dialog объявлен в скрипте, который создает диалоговое окно, поэтому он не является глобальной переменной. Хммм, об этом нужно подумать.