Javascript jQuery代码在Chrome中工作,但在IE中不工作

Javascript jQuery代码在Chrome中工作,但在IE中不工作,javascript,jquery,google-chrome,archer,rsa-archer-grc,Javascript,Jquery,Google Chrome,Archer,Rsa Archer Grc,我正在RSA Archer平台中实现这段代码 它在Chrome中工作得很好,但在IE9中却不行 函数hideDeleteButton(){ var elId=“master\u DefaultContent\u rts\u s2487\u f6881srvgrid\u ctl00”; var el=document.getElementById(elId); var className=“GridRemoveImage”; 如果(el!=null){ var lst=el.getElements

我正在RSA Archer平台中实现这段代码

它在Chrome中工作得很好,但在IE9中却不行

函数hideDeleteButton(){
var elId=“master\u DefaultContent\u rts\u s2487\u f6881srvgrid\u ctl00”;
var el=document.getElementById(elId);
var className=“GridRemoveImage”;
如果(el!=null){
var lst=el.getElementsByClassName(className);
对于(var i=0;i
因为您用jquery标记了问题,所以我编写了与您提供的javascript代码等效的jquery代码

$(window).load(function() {
    $("#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00").find(".GridRemoveImage").hide();
});

不必通过每个元素循环来更改可见性。这段代码也具有浏览器兼容性。

因为你用jquery标记了这个问题,所以我编写的jquery代码与你提供的javascript代码相当

$(window).load(function() {
    $("#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00").find(".GridRemoveImage").hide();
});

不必通过每个元素循环来更改可见性。此代码也将具有浏览器兼容性。

此新功能应能完成以下工作:

function hidedeletebutton() { 
    $('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').each(function() {
        $(this).hide();
    });
}

它的功能也一样,只是更短,使用jQuery时,这个新函数应该可以完成以下任务:

function hidedeletebutton() { 
    $('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').each(function() {
        $(this).hide();
    });
}

它也一样,只是比较短,而且使用jQuery时,这个问题有几个基本方面我想介绍:

糟糕的设计 您必须隐藏“删除”按钮这一事实告诉我,您的Archer应用程序设计不正确。您需要通过角色和记录权限配置控制对记录的访问,但不能使用自定义对象代码。 如果我使用开发者工具手动激活删除按钮并删除记录,会怎么样?作为一名开发人员,您想对此负责吗? 我建议您后退两步,重新设计应用程序中的访问控制。你问的问题首先应该是我

RSA Archer平台 所有与jQuery相关的答案都没有考虑以下因素:

  • 这是RSA Archer平台中使用的自定义对象(特殊类型的对象)的代码
  • Archer平台生成JavaScript丰富的网页。因此,我建议您不要重载文档相关的函数,除非确实需要这样做
  • 自定义对象代码在加载表单时执行,在大多数情况下不需要重写“document.load”事件处理程序
这是一个可用于IE8-IE11、FireFox、Chrome和Opera的代码示例:

<script type="text/javascript">
    document.getElementById("master_btnDelete").style.display = "none";
</script>

document.getElementById(“master\u btnDelete”).style.display=“无”;
为什么会这样?因为存储在Archer中自定义对象中的JavaScript代码将在作为表单本身的一部分加载后执行

IE特定行为 如果给定的archer应用程序有一个用于填充交叉引用的值列表的弹出对话框窗口,您实际上可能需要重写窗口加载事件。在这种情况下,包括“删除”按钮在内的工具栏按钮可能会在显示每个弹出窗口后恢复。在这种情况下,您必须使用类似的代码:

<script type="text/javascript">
    // function that will hide the Delete button
    function doLoad() {
        alert( "The load event is executing" );
        document.getElementById("master_btnDelete").style.display = "none";
    }

    // code that will add load event for IE and none-IE browsers
    if (window.addEventListener){window.addEventListener("load",doLoad,false);}
    else 
    if (window.attachEvent) { window.attachEvent("onload",doLoad);}
    else 
    if (window.onLoad) { window.onload = doLoad;}
</script>

//将隐藏删除按钮的函数
函数doLoad(){
警报(“加载事件正在执行”);
document.getElementById(“master\u btnDelete”).style.display=“无”;
}
//为IE和none IE浏览器添加加载事件的代码
if(window.addEventListener){window.addEventListener(“load”,doLoad,false);}
其他的
if(window.attachEvent){window.attachEvent(“onload”,doLoad);}
其他的
如果(window.onLoad){window.onLoad=doLoad;}
不幸的是,微软与IE设计不太一致,这就是为什么你必须检查什么样的事件处理方法有效,应该使用什么样的方法。 如果您对此代码有更多问题,可以使用以下两个链接作为参考:和

现在,为什么jQuery基代码不起作用?我不知道,可能是您编写的Archer版本使用的jQuery库版本不够支持IE9。这让我想到另一点

使用Archer提供的jQuery 您在提供的原始代码示例中使用了jQuery。我建议您在为Archer编写自定义对象时不要使用任何库

  • 您使用的jQuery库是作为平台的一部分提供的。jQuery库可以是“自定义构建”,以包含您使用的函数。或者在本例中,包括Archer开发人员使用的jQuery函数。在Archer的下一个版本中,此列表可能会更改。如果您使用的函数不再是最新版本库的一部分,会发生什么情况
  • 您无法控制所使用的jQuery版本。因此,您不能保证对某些浏览器的支持,也不能强制RSA使用最新版本。这限制了代码的功能。这就是这里发生的事情。您使用了jQuery,但它不适用于IE9。它能与IE11一起工作吗?使用最新补丁升级Archer后会发生什么
  • 请记住,您编写的代码必须与Archer已经加载的页面一起使用10多行JavaScript代码。因此,让自定义对象尽可能简单,尽量不要使用任何外部库。这一切都是关于支持的(除非你在那里呆了一个月,并且不打算支持你的代码)
  • 总结
  • 不要在RSA Archer中隐藏删除按钮,但要重新设计安全性。从长远来看,你会后悔隐藏删除按钮的决定。总有一天用户会删除记录,你会感到痛苦
  • 使用KISS原则-使用简单的JavaScript代码,避免库,保持自定义对象简短。尽可能避免自定义对象。或者,您必须在每次更新平台时对其进行测试

  • 祝你好运,用户3728843

    这个问题有几个基本方面我想介绍:

    糟糕的设计 事实上,你必须隐藏“删除”按钮告诉我,你是一个弓箭手
    $(document).ready(function(){  
      $('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').hide();
    });
    
    $(document).ready(function(){  
      $('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').css("display", "none");
    });