Javascript getElementById可以在一个环境中工作,但不能在另一个环境中工作

Javascript getElementById可以在一个环境中工作,但不能在另一个环境中工作,javascript,asp.net,iis,Javascript,Asp.net,Iis,我有javascript代码,可以为我点击一个按钮。 当托管在计算机1上时,它工作,但当托管在计算机2上时,.GetElementByID调用返回Null js代码如下所示: function ClickAButtonForMe() { var btn = null; var btnClientID = '<%= btnReset.ClientID %>'; //this comes back with a valid clientID on **both*

我有javascript代码,可以为我点击一个按钮。 当托管在计算机1上时,它工作,但当托管在计算机2上时,.GetElementByID调用返回Null

js代码如下所示:

function ClickAButtonForMe() {
    var btn = null;
    var btnClientID = '<%= btnReset.ClientID %>';

    //this comes back with a valid clientID on **both** machines
    alert("btnClientID=/" + btnClientID + "/, nodevalue=/" + nodeValue + "/");

    if (0 < btnClientID.length) {
        btn = document.getElementById(btnClientID);
    }
    if (btn != null) {
        //on machine 1, this works as expected
        btn.click();
    }
    else {
        //on machine 2, i come here
        alert("button not found");
    }
}
函数单击abutnotforme(){
var btn=null;
var btnClientID='';
//这会在**两台**机器上返回一个有效的clientID
警报(“btnClientID=/”+btnClientID+“/,nodevalue=/”+nodevalue+“/”;
if(0
我的ascx文件中的按钮声明如下所示:

    <div id="div_Reset" class="eventManagementButtonWrapper" runat="server">
        <div>
            <asp:Button class="eventManagementButton" ID="btnReset" ValidationGroup="None" runat="server"
                Text="Reset" />
        </div>
    </div>

换句话说,我可以在环境中为我的按钮获取clientid。但当我试图抓住按钮时,它在机器2上失败了

在找出这种差异的原因时,有人能提出一些可能的建议吗?我已尝试将clientID更改为“Static”,它除了在第一条调试消息中更改clientID外,什么都不做。

确保“”表达式在这两种情况下都生成相同的clientID值。看起来您正在WebUserControl中使用此标记,其ID(以及按钮的ClientID)将相应地计算

作为一个通用解决方案,您可以使用我的thread方法:


受保护的void btnReset_Init(对象发送方,事件参数e){
按钮btn=(按钮)发送器;
string script=string.Format(“var{0}=document.getElementById('{1}');”,btn.ID,btn.ClientID);
Page.ClientScript.RegisterStartupScript(Page.GetType(),“任意_键”,脚本,true);
}
函数ClickAbutInfo(){
//警报(_btnReset);
_btnReset.click();
}
这很奇怪。 您是否尝试过将ClientIDMode更改为“Static”并将其更改为:

'<%= btnReset.ClientID %>'
一旦ClientIDMode是“静态”的,asp就不会向控件id添加任何内容,而是让它保持您命名的状态


根据我的经验,在不同的机器上,只有一种情况会导致这种情况:


“您在DOM未就绪时调用ClickAbutForm函数”

以下是一些可能出现错误并导致特定于环境的差异的建议,请注意:大多数建议并不仅仅针对您的问题

  • 清除所有浏览器上的缓存
  • 检查所有浏览器的版本
  • 比较浏览器中的输出HTML
  • 是同一个(或相关的相似)用户登录的
  • 他们的观点是一致的吗
  • 是同一个url,还是同一代码的两个不同托管副本?
    • 如果这是代码的不同副本,请确保其版本相同
  • 根据环境(和应用程序类型)执行IIS重置以确保加载了正确的DLL
  • 您是否在其中一个环境上运行调试/发布版本
  • 您是否在其中一个环境上运行调试
  • 在这两种情况下DOM是否都已完全加载?(比赛条件?)

您希望按钮做什么?有一些方法不依赖于抓取元素ID。机器1和机器2有什么不同?另外,这是否只适用于IE
click()
是IE特有的。@Diodeus-更大的画面是屏幕上有两个TreeView控件。单击按钮可将选定节点从左侧的树滑动到右侧的树中。我试图通过在用户单击树本身时触发该操作来自动滑动它们。该功能在我的本地计算机上工作,但在部署计算机上不工作。@GGG-坦率地说,可能有很多不同之处-一个是我的本地计算机,另一个是服务器。显示的代码目前在我本地的firefox中运行,但在IE和服务器上的firefox中失败。我不。。。我想我帮不了你。我无法理解为什么web浏览器会在服务器上运行:(这是有道理的,但这是一个用户发起的操作,在页面完成加载后的几秒钟内发生。是否有任何东西会导致DOM长时间未完成?
'<%= btnReset.ClientID %>'
btnReset