3

ユーザーが押したときにデフォルトボタンに関連付けられたイベントを発生させないjQuery確認ダイアログがありますEnter。マウスを使用すると、ボタンは期待どおりに動作します。

Enter キーを押すと、デフォルトのボタン (「キャンセル」)強調表示されますが、それ以外は何も起こりません。

これはダイアログです:

ここに画像の説明を入力

上記のダイアログを生成するコードは次のとおりです。

$(document).ready(function () {

    $('#m_btnNext').click(function (e) {
            var my_messages = 'warning';
            if (my_messages.length > 0) {
                e.preventDefault();
                $('#dialog-confirm-withdraw').html(my_messages);
                $("#dialog-confirm-withdraw").dialog("open");
                return false;
            }
            return true;    
            });

        var cascadeConfirmWithdrawMarkup = "<div id='dialog-confirm-withdraw' title='Withdraw'><p>Set on build</p></div>";
        $(cascadeConfirmWithdrawMarkup).appendTo('body').hide();

        $('#dialog-confirm-withdraw').dialog({ title: '<span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>Withdraw Warnings',
            width: 400,
            height: 175,
            resizable: false,
            draggable: false,
            modal: true,
            autoOpen: false,
            open: function () {
                $('.ui-dialog-buttonpane button:eq(1)').focus();
            },
            buttons: {
                "Proceed with withdraw": function () {
                    $(this).dialog("close");
                },
                "Cancel": function () {
                    $(this).dialog("close");
                }
            }
        });
});

最も単純な形式では、このコードは正常に機能しますが、実際の形式で犯人を特定するのは非常に困難です。

上記のコードのみが存在するように、他のすべての JavaScript をコメントアウトしました。エラーはコンソールに記録されません。それでも何も起こりません。

上記の js に明らかなエラーがない場合、この干し草の山から針を見つける最善の方法は何ですか?

マゾヒストは、完全な HTML ページ (すべての JavaScript を含む) をここからダウンロードできます。FF の「Web ページ、完全」という名前で保存を使用して、その zip を作成しました。

このフォームに機能を追加しているだけであることに注意してください。私はそれを作成しませんでした。

4

1 に答える 1

1

halcyonCommon.js には、ドキュメントの読み込み時に呼び出される KeyListener() という関数があります。その関数はキーダウンのイベントリスナーを追加し、ドキュメント全体のエスケープおよびエンターキーダウンイベントを処理しているように見えます:

        case KeyCode.Enter:             
            if (el.tagName == "INPUT") {                    
                switch (el.type) {
                    case "checkbox" :
                    case "password" :
                    case "radio" :
                    case "text" : 
                        {   //Check for datebox and timebox, has controller --> onblur before click OK
                            if (el.Controller && el.Controller.onblur)
                                el.Controller.onblur({target : el});

                            return oThis.clickAction(oThis._DefaultButton, e); 
                        }
                    break;                      
                    case "file" ://ThamHNguyen, added 14-NOV-06
                        return oThis.clickAction(oThis._DefaultButton, e);
                        break;

                    default:
                        return true;
                }
            } else if (el.tagName == "SELECT") {
                return oThis.clickAction(oThis._DefaultButton, e);              
            } else if (el.tagName == "HTML" || el.tagName == "BODY" || el.tagName == "TD") { //"TD" : on IE only
                return oThis.clickAction(oThis._DefaultButton, e);              
            } else if (el.tagName == "TEXTAREA" || el.tagName == "A" ) {
                return true;
            } else {
                return false; //Prevent default button of IE
            }

最後の else ケースを参照してください。これを削除すると問題は解決しますが、プログラムの他の場所で望ましくない動作が発生する可能性があります。その場合は、次の行に true を返す (したがって通常の動作を許可する) 3 番目の可能性のある機会を追加する必要があります。

} else if (el.tagName == "TEXTAREA" || el.tagName == "A" )

例えば:

} else if (el.tagName == "TEXTAREA" || el.tagName == "A" || el.tagName == "SPAN" )

...しかし、それは十分に具体的ではないかもしれません。

于 2012-10-13T08:35:46.357 に答える