Я медленно наращиваю функциональность всплывающего диалогового окна, содержащего форму. Он работает с одним исключением. В событии onClick на кнопке я хочу обновить значение в форме. Он обновляет значение, но только в div (emailForm), который был введен в форму. У меня есть набор div для отображения, чтобы я мог видеть обновление. Как обновить его в объекте myDialog?Не удается обновить виджет диджета, скопированный в диалоговом окне
<div id="emailForm" Executive Director>
<h1>Contact Form</h1>
<p>Feel free to drop us a line.</p>
<form id="contact-form" action="confirmation.php" method="post">
<fieldset class="contact-fieldset">
<ol>
<li>
<label for="to">To:</label>
<input id="to" name="to" type="text" size="40" value="Staff" disabled>
</li>
<li>
<label for="message">Message:</label>
<textarea id="message" name="message"></textarea>
</li>
</ol>
<input type="submit" class="contact-submit" value="Send">
</fieldset>
</form>
</div>
<script>
require(["dojo/dom",
"dijit/Dialog",
"dijit/form/TextBox",
"dijit/form/Textarea",
"dojo/domReady!"],
function(dom, Dialog, TextBox, TextArea)
{
toText = new TextBox({readOnly: "readOnly" , value: "Staff"},"to");
messageText = new TextArea({placeholder: "Your message"},message);
var emForm = dom.byId("emailForm").innerHTML;
myDialog = new Dialog({
title: "My Dialog",
content: emForm,
style: "width: 600px"
});
});
require(["dijit/form/Button",
"dojo/domReady!"],
function(Button)
{
var showEmailBtn = new Button({
onClick: function(evt){
toText.set("value","Executive Director");
myDialog.show(); } },
"showEmail");
});
</script>
Update
Основываясь на описании tik27 о проблеме, я попробовал следующий тест:
<script>
require(["dojo/dom",
"dijit/Dialog",
"dijit/form/TextBox",
"dijit/form/Textarea",
"dojo/domReady!"],
function(dom, Dialog, TextBox, TextArea)
{
var emForm = '<div id="emailForm" Executive Director><h1>Contact Form</h1><form id="contact-form" action="confirmation.php" method="post"><fieldset class="contact-fieldset"><ol><li><label for="to">To:</label><input id="to" name="to" type="text" size="40" value="Gereral" disabled></li></ol><input type="submit" class="contact-submit" value="Send"></fieldset></form></div>';
myDialog = new Dialog({
title: "My Dialog",
content: emForm,
style: "width: 600px"
});
toText = new TextBox({readOnly: "readOnly" , value: "Staff"},"to");
});
require(["dojo/dom",
"dijit/form/Button",
"dojo/domReady!"],
function(dom, Button)
{
var showEmailBtn = new Button({
onClick: function(evt){
toText.set("value","Executive Director");
myDialog.show(); } },
"showEmail");
});
</script>
Это устраняет проблему. Показанный html - это всего лишь небольшое испытание полной формы. Как я могу сохранить html отдельно от скрипта, а затем привести его без дублирования идентификатора? Я заглянул в шаблоны, но это кажется излишним.
Update 2
Опять же, основываясь на некоторых Tik27 предложил, я попытался это:
<script id="emailHTML" type="text/template">
<div id="emailForm" Executive Director>
<!-- Same html as above in emailForm -->
</div>
</script>
<script>
require(["dojo/dom",
"dijit/Dialog",
"dijit/form/TextBox",
"dijit/form/Textarea",
"dojo/domReady!"],
function(dom, Dialog, TextBox, TextArea)
{
myDialog = new Dialog({
title: "My Dialog",
content: dom.byId("emailHTML").textContent,
style: "width: 600px"
});
toText = new TextBox({readOnly: "readOnly" , value: "Staff"},"to");
});
require(["dojo/dom",
"dijit/form/Button",
"dojo/domReady!"],
function(dom, Button)
{
var showEmailBtn = new Button({
onClick: function(evt){
toText.set("value","Executive Director");
myDialog.show(); } },
"showEmail");
});
</script>
браузер игнорирует все в сценарии текст/шаблон так идентификаторы добавляется лишь один раз в DOM , Выполните поиск на этом сайте для получения дополнительной информации о типе сценария.
Ваш код на Fiddle исправляет проблему, но я предпочитаю программный подход, чтобы сохранить мой HTML чистой. Я даже поддерживаю php из моего html, используя предварительный процессор TWIG. В идеале я также хотел бы использовать форму на отдельной веб-странице, когда Javascript отключен. Повернув его в тег скрипта, вы имеете в виду его окружение с помощью ? – curt
Ну, если вы возьмете diplay: никто из формы, если нет поддержки javascript, dojo не будет анализировать и скрывать форму. Вы останетесь с обычной формой html. Проблема, которую вы испытываете, - это дубликаты идентификаторов, поскольку они должны быть уникальными додзё, не учитывает, что может быть 2, и обновляет первое, что находит, если вы хотите сохранить его таким образом, я бы использовал переменную класса и использовал додзё. query («»), чтобы вернуть массив узлов и обновить как скрытую форму, так и одну в диалоговом окне. –
tik27
Ваш третий вариант - предоставить вашему диалогу идентификатор и использовать либо registry.findwidgets (registry.byId («dialogID»)), чтобы получить все виджеты в диалоговом окне. – tik27