2
  1. 変数はどこoptions.eventTargetから来ますか?
  2. この関数が ASP.NET コードで生成されている場合、Mozilla でこの関数を修正するにはどうすればよいですか?
  3. この JavaScript 関数は何に使用されますか?

Mozilla Firefox はoptions.eventTarget、アンカー タグが呼び出されたときに、この関数の最後でこの値を取得します。保存 (アンカー タグ) ボタンが Mozilla で機能しないので、その理由を突き止めようとしています。

ExplorerPageHtmlLeft$ct...aveCancelDelete$LBuSave <===== problem

Internet Explorer はoptions.eventTarget、アンカー タグが呼び出されたときに、この関数の最後でこの値を取得します。[保存 (アンカー タグ)] ボタンは Internet Explorer で正常に機能します。

ExplorerPageHtmlLeft$ctl02$ctl00$SaveCancelDelete$LBuSave

読みやすいように広げたコードを次に示します。


Mozilla Firefox の [保存] ボタン (破損):

<a
id="ExplorerPageHtmlLeft_ctl02_ctl00_SaveCancelDelete_LBuSave"
href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ExplorerPageHtmlLeft$ctl02$ctl00$SaveCancelDelete$LBuSave", "", true, "", "", false, true))"
onclick="javascript:encryptField(document.getElementById('ExplorerPageHtmlLeft_ctl02_ctl00_SaveCancelDelete_TxtPassword'),document.getElementById('IHHidden'));"
>
<img border="0" alt="Save" src="/images/save.gif">
</a>

Internet Explorer の [保存] ボタン (正常に動作):

<a
onclick="javascript:encryptField(document.getElementById('ExplorerPageHtmlLeft_ctl02_ctl00_SaveCancelDelete_TxtPassword'),document.getElementById('IHHidden'));"
id="ExplorerPageHtmlLeft_ctl02_ctl00_SaveCancelDelete_LBuSave"
href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ExplorerPageHtmlLeft$ctl02$ctl00$SaveCancelDelete$LBuSave&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))"
>
<img src="/images/save.gif" border="0" alt="Save">
</a>

JavaScript 関数は次のとおりです。

function WebForm_DoPostBackWithOptions(options) {
    var validationResult = true;
    if (options.validation) {
        if (typeof(Page_ClientValidate) == 'function') {
            validationResult = Page_ClientValidate(options.validationGroup);
        }
    }
    if (validationResult) {
        if ((typeof(options.actionUrl) != "undefined") && (options.actionUrl != null) && (options.actionUrl.length > 0)) {
            theForm.action = options.actionUrl;
        }
        if (options.trackFocus) {
            var lastFocus = theForm.elements["__LASTFOCUS"];
            if ((typeof(lastFocus) != "undefined") && (lastFocus != null)) {
                if (typeof(document.activeElement) == "undefined") {
                    lastFocus.value = options.eventTarget;
                }
                else {
                    var active = document.activeElement;
                    if ((typeof(active) != "undefined") && (active != null)) {
                        if ((typeof(active.id) != "undefined") && (active.id != null) && (active.id.length > 0)) {
                            lastFocus.value = active.id;
                        }
                        else if (typeof(active.name) != "undefined") {
                            lastFocus.value = active.name;
                        }
                    }
                }
            }
        }
    }
    if (options.clientSubmit) {
        __doPostBack(**options.eventTarget**, options.eventArgument);
    }
}
4

1 に答える 1

1

options.eventTarget の値はまったく問題ではないようです。ちょうど50文字だったのが不思議でした。

Firebug の options.eventTarget: "ExplorerPageHtmlLeft$ct...aveCancelDelete$LBuSave"

Mozilla Firefox Firebug には 50 文字しか表示されないことが判明しました。コントロール クライアント ID の最初と最後の部分 (および中央の 3 つのドット) を取得し、それを Firebug ウォッチ変数内の値フィールドに貼り付けます。確認するために、「alert(options.eventTarget)」をウォッチ変数に入れるだけで、値全体が表示されました。だから絶対そうじゃない!

Mozilla のコード ビハインドで LinkBut​​ton がイベント ハンドラを呼び出さない理由はまだわかりませんが、Internet Explorer ではそうです。より多くの情報が得られたら、投稿すると思います(おそらく別の質問に)。リンクボタンがクリックされたときに検証がオンになっていることに関係している可能性があります。それが、ASP.NET がこの関数をクライアント コードに自動的に挿入する原因だと思います。

于 2011-07-15T20:58:24.287 に答える