2

私は次のものを持っています:

$(function () {

    $.ajaxSetup({ cache: false });
    var dialogs = {};

    var formSubmitHandler = function (e) {
        ...
    }

}

次に、別のスクリプトで呼び出しを試みます

function dialogClick(link) {

    $.get(viewUrl + parameters)
            .success(function (content) {
                if (content.match(/^[eE]rror/)) {
                    mvcOnFailure(data)
                } else {
                    $.modal({
                        title: title,
                        closeButton: true,
                        content: content,
                        width: false,
                        resizeOnLoad: true
                    }).find('form').submit(formSubmitHandler).end();
                }
            })

読みやすくするために、スクリプトの一部を切り取っていることに注意してください。次のエラーのみを示すスクリプト エラーはありません。

2 番目のスクリプトでは、「SCRIPT5009: 'formSubmitHandler' は Internet Explorer で定義されていません」というエラー メッセージが表示されます。

私はそれを間違って呼んでいますか?関数はグローバルになると思いましたが、その中にあるスクリプトを確認すると、ページに添付されています。

4

4 に答える 4

7

いいえ、グローバルではありません。「formSubmitHandler」関数は、投稿したサンプル コードの最初のブロックの「ready」コールバック内で宣言されています。したがって、その関数に対してプライベートです。

本当にグローバル関数が必要な場合にできることは次のとおりです。

window['formSubmitHandler'] = formSubmitHandler;

最初の関数で。または、代わりに、jQuery の「グローバル」関数にすることもできます。

$['formSubmitHandler'] = formSubmitHandler;

その場合、次のように取得します$.formSubmitHandler

于 2012-04-24T12:53:01.027 に答える
0

関数を関数ブロックの外に移動してみてください。

$(function () {

    $.ajaxSetup({ cache: false });
    var dialogs = {};
}

var formSubmitHandler = function (e) {
    ...
}
于 2012-04-24T12:54:43.570 に答える
0

formSubmitHandlervar変数を使用したため、宣言した関数スコープ内にのみ存在します。

次のいずれかを行う必要があります。

  1. dialogClick同じスコープで宣言する
  2. または単にformSubmitHandler使用して、グローバルスコープで宣言しますwindow.formSubmitHandlerfunction formSubmitHandler(){}
于 2012-04-24T12:55:00.823 に答える
0

formSubmitHandler関数から見えないスコープで宣言されたdialogClick()関数です

そう

  • formSubmitHandler次のように宣言するかglobal
  • または、関数dialogClick内でdocument.ready関数を定義します(formSubmitHandler親スコープにあるため、到達可能です)
于 2012-04-24T12:55:42.737 に答える