0

フォームを含むポップアップ ダイアログの機能をゆっくりと構築しています。1 つの例外を除いて動作します。ボタンの 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>

アップデート

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 をスクリプトとは別に保持し、ID を複製せずにそれを取り込むにはどうすればよいですか? テンプレートを調べましたが、やり過ぎのようです。

更新 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>

ブラウザはテキスト/テン​​プレート スクリプト内のすべてを無視するため、ID は DOM に 1 回だけ追加されます。スクリプト タイプの詳細については、このサイトを検索してください。

4

1 に答える 1

0

これを行う方法に関するここでの問題は、id="to" を使用して入力することになることです。ID は html 内で一意である必要があります。このようにしたい場合は、フォーム情報を type="text/template" のスクリプト タグに入れることをお勧めします。

しかし、宣言的に作成しない理由はありますか?

<div id="emailForm" data-dojo-type="dijit.Dialog" style="display:none">
<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 data-dojo-type="dijit.form.TextBox" data-dojo-props="readOnly: 'readOnly' , value:'Staff'" id="to" name="to" type="text" size="40">
            </li>
            <li>
                <label for="message">Message:</label>
<textarea id="message" name="message" data-dojo-type="dijit.form.Textarea" data-dojo-props="placeholder: 'Your message'"></textarea>
            </li>
        </ol>
        <input type="submit" class="contact-submit" value="Send">
    </fieldset>
</form>
</div>

<div id="showEmail">Show</div>

<script>
require(["dijit/form/Button",
    "dijit/registry","dojo/dom",
    "dijit/Dialog",
    "dijit/form/TextBox",
    "dijit/form/Textarea"],
        function(Button,registry)
{
    var showEmailBtn = new Button({
    onClick: function(evt){

        registry.byId("emailForm").show();
        registry.byId("to").set("value","Executive Director");
    } }, "showEmail");
});
</script>

フィドル:: http://jsfiddle.net/ZJ735/

于 2013-07-26T05:14:38.003 に答える