1
<html>
    <div id="pnl_prompt" style="display:none; background-color:#808080">
        <b id="lbl_prompt_title">Prompt</b> <br />
        <span id="lbl_prompt_name" class="right">Field:</span>  <input id="txt_prompt_field" type="text"/>  <hr />
        <input id="btn_prompt_ok" type="button" value="OK"/>
        <input id="btn_prompt_cancel" type="button" value="Cancel"/>
        <script type="text/javascript">
            function myPrompt(title, name, isPassword, callback){
                $("#btn_prompt_ok").click(function(){
                    $("#pnl_prompt").css("display","none");
                    ENTERED_VALUE = $("#txt_prompt_field").val();
                    if(callback)    callback();
                });
                $("#btn_prompt_cancel").click(function(){
                    $("#pnl_prompt").css("display","none");
                    ENTERED_VALUE = null;
                    $("#txt_prompt_field").val("");
                });

                ENTERED_VALUE = null;
                $("#lbl_prompt_title").html(title);
                $("#lbl_prompt_name").html(name+":");
                if(isPassword)  $("#txt_prompt_field").prop("type", "password");
                $("#pnl_prompt").css("display","block").css({position:"absolute",left:"100px",top:"100px"});
                $("#txt_prompt_field").val("").focus();
            }
        </script>
    </div>
</html>

上記の div は、[OK] ボタンと [キャンセル] ボタンを含むテキスト フィールドをレイアウトします。myPrompt 関数は div を表示し、OK/キャンセル ボタン アクションを宣言します。OK は、テキスト入力値を window.ENTERED_VALUE に保存してから、div を非表示にします。次のテスト JavaScript 呼び出しを検討してください。

javascript:myPrompt("Hello", "World", false, function(){alert(ENTERED_VALUE);});

ユーザーが[OK]ボタンから値を送信した後、入力された値を警告するはずです。そうしますが、呼び出しを再度実行すると、2 つのアラートが表示されます。再び 3 つのアラートが表示されます。これはどのように発生していますか?

4

1 に答える 1

5

myPromptさて...次の行で呼び出すたびに、新しいクリック ハンドラーを割り当てます。

function myPrompt(title, name, isPassword, callback){
        $("#btn_prompt_ok").click(function(){ // new callback for clicking!
            $("#pnl_prompt").css("display","none");
            ENTERED_VALUE = $("#txt_prompt_field").val();
            if(callback)    callback();
        });

        $("#btn_prompt_cancel").click(function(){ // new callback for clicking!
            ...
于 2013-01-10T21:28:59.077 に答える