2
  1. 变量options.eventTarget从何而来?
  2. 如果它是由 ASP.NET 代码生成的,如何为 Mozilla 修复此功能?
  3. 这个 JavaScript 函数是做什么用的?

options.eventTargetMozilla Firefox在调用锚标记时在此函数结束时获取此值。保存(锚标记)按钮在 Mozilla 中不起作用,所以我试图找出原因。

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

options.eventTargetInternet Explorer在调用锚标记时在此函数的末尾获取此值。保存(锚标记)按钮在 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 监视变量中的 value 字段中。为了确认,我只是将“alert(options.eventTarget)”放入 watch 变量中,它显示了整个值。所以这绝对不是!

我仍然不知道为什么我的 LinkBut​​ton 没有在 Mozilla 后面的代码中调用我的事件处理程序,但在 Internet Explorer 中却可以。我想一旦我有更多信息,我会发布它(可能在不同的问题上)。单击我的链接按钮时,它可能与打开验证有关。我猜这就是导致 ASP.NET 自动将此函数放入客户端代码的原因。

于 2011-07-15T20:58:24.287 回答