1

次のように、UI ダイアログを開くためのクリック ボタンが A.html にあり、ダイアログは B.html をコンテンツとしてロードするとします。

したがって、ユーザーがダイアログの「OK」ボタンをクリックした後、B.html で id=inputName の値を取得したい場合は、どうすればよいですか? 私はいつも「未定義」になります。

私はjQueryが初めてなので、愚かな問題かもしれません。あなたが私を助けることができれば、私は非常に感謝します.

A.html


$(function(){
    $('#name').click(function(){
        var aaa = window.parent.$.dialog({
            buttons: {
                'ok': function(){
                    //get the value from B.html(ex.the value which id=inputName)
                    $aaa.dialog('close');
                }
            }
        });

        var link = 'B.html';
        aaa.load(link);
        aaa.dialog('open')
    });
}); //jquery code


<div>
    <input type="button" value="input your name" id='name'>
</div>  //html code

B.html


<input type="text" name="inputName" id="inputName"/>

4

2 に答える 2

0

ここでの問題は、.load() が非同期であることです。

考えられる解決策を以下に示します。要点は、ロードの完了時、つまりコールバックでのみダイアログをポップアップできることです。以下の例では、読み込まれた HTML のホルダーとして非表示の要素が作成されることに注意してください。ロードが完了すると、その子をトラバースするか、ドキュメントから要素を取得できます。

<h1 id="dialogtest">Click me for a dialog!</h1>
<script type="text/javascript">
var myElementValue = null;
$(function(){
    $('#dialogtest').click(function(){
    var dialogElement = document.createElement("div");
    var link = 'B.html';
    $(dialogElement).load(
        link,
        function(responseText, textStatus, XMLHttpRequest) {
            alert('Load complete: ' + responseText + "; " + textStatus + ";\n " + dialogElement.outerHTML);
            var myDialog = $(dialogElement).dialog({
                autoOpen: false,
                buttons: {
                    'ok': function(){
                        // You can traverse the childNodes of dialogElement, or do just thie following.
                        // For example, this is the value of a text node:
                        myElementValue = document.getElementById("myElement").childNodes[0].data;
                        alert(myElementValue);
                        myDialog.dialog('close');
                    }
                }
            });
            $(myDialog).dialog('open'); // Can autoOpen it above instead
        }
    );
    });
}); //jquery code
</script>
于 2012-10-16T09:26:21.480 に答える
0

本当は ajax リクエストで CGI 目的で B.html の値を取得したいのですが。別の方法で、次のコードをB.htmlに追加してこの作業を 行いました。

<script type="text/javascript">
var okBtn = $('.ui-dialog-buttonpane').children("button:last");
okBtn.click(function(){ ajaxRequest(); });

function ajaxRequest() {
        var data
        data.name = $('#inputName').val();
        var url="(cgi link)";
        $.get(url,data);
        return;
}
</script>
于 2012-10-18T13:22:51.947 に答える