我正在RSA Archer Platform中实现此代码。
它在Chrome中完美运行,但在IE9中却没有。
function hideDeleteButton(){
var elId = "master_DefaultContent_rts_s2487_f6881srvgrid_ctl00";
var el = document.getElementById(elId);
var className = "GridRemoveImage";
if (el != null) {
var lst = el.getElementsByClassName(className);
for (var i = 0; i < lst.length; ++i) {
lst[i].style.display = 'none';
}
}
}
$(window).bind("load", function(){
hideDeleteButton();
});
document.load = hideDeleteButton();
答案 0 :(得分:2)
由于您使用jquery标记了问题,因此我编写了与您提供的javascript代码等效的jquery代码。
$(window).load(function() {
$("#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00").find(".GridRemoveImage").hide();
});
您不必遍历每个元素来更改可见性。此代码也具有浏览器兼容性。
答案 1 :(得分:1)
这个新功能应该可以胜任:
function hidedeletebutton() {
$('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').each(function() {
$(this).hide();
});
}
它做的相同,只是更短,并使用jQuery
答案 2 :(得分:1)
这个问题有几个我想要涵盖的基本方面:
你必须隐藏&#34;删除&#34;按钮告诉我你的Archer应用程序设计不正确。您需要通过角色和记录权限配置来控制对记录的访问,而不是使用自定义对象代码。 如果我使用开发人员工具手动激活删除按钮并删除记录怎么办?你想作为开发人员对此负责吗? 我建议您退后两步,重新设计应用程序中的访问控制。你问的问题应该是我在第一时间问的。
所有与jQuery相关的答案都没有考虑以下因素:
这是您可以用于IE8-IE11,FireFox,Chrome和Opera的代码示例:
<script type="text/javascript">
document.getElementById("master_btnDelete").style.display = "none";
</script>
为什么会这样?因为存储在Archer中的自定义对象中的JavaScript代码将在作为表单本身的一部分加载后执行。
如果给定的archer应用程序有一个用于填充交叉引用值列表的弹出对话框窗口,则实际上可能需要覆盖窗口加载事件。在这种情况下,工具栏按钮包括&#34;删除&#34;在显示每个弹出窗口后,可能会恢复按钮。在这种情况下,您必须使用类似的代码:
<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>
不幸的是,微软与IE设计不太一致,这就是为什么你必须检查哪些事件处理方法有效并应该使用。 如果您对此代码有更多疑问,可以使用以下两个链接作为参考:StackoverFlow Question和MSDN Help Page
现在,为什么你的jQuery基础代码没有用?我不知道,可能是您编写的Archer版本使用的jQuery库版本不能很好地支持IE9。这让我想到了另一点。
您在提供的原始代码示例中使用了jQuery。我建议您在为Archer编写自定义对象时不要使用任何库。
祝你好运,user3728843!
答案 3 :(得分:1)
您还可以使用简单 CSS隐藏元素,这更有可能跨浏览器工作
在这种情况下:
#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage {
display: none;
}
答案 4 :(得分:0)
@StanUteski提出了一些很好的观点并列出了非常好的最佳实践。
另外请记住,如果用户使用像Safari这样的奇怪浏览器来获取基本功能,那么你仍会得到奇怪的结果。
此外,浏览器可能会意外关闭JavaScript。
现在,你可能会说这没有用,&#34; ... b / c我的用户知道Archer只会使用&#39; 123&#39;特定版本的&#39; ABC&#39;浏览器&#34; - 但是,重要的是,即使他们是世界上最好的用户,并且完全了解,您也无法控制他们使用的浏览器,或者他们是否使用平板电脑或手机,或者如果页面加载奇怪并且没有正确加载脚本/库 - 即使页面没有渲染,在这种情况下你可能仍然会暴露按钮,并创建了一个可能性用户点击并删除记录。
在所有情况下,您都希望坚持使用适用于Web应用程序的MVC(模型 - 视图 - 控制器)或MVVM(模型 - 视图 - 视图 - 模型)编程范例,其中CONTROLLER位于服务器端并且控制应用程序&#34;功能流程和特性&#34; - 例如 - 包含策略列表的页面具有以下按钮,这些按钮指向相应的页面:
然后使用用户角色和权限(这实际上是一个不同的控制器功能 - 基本上是访问和权限管理控制器子系统)进一步限制这些按钮及其引导位置。
这导致:
在触及开发系统之前可以而且应该完成的事情
用于确定的线框:
查看辅助功能:
主要工作&#34;屏幕&#34;用户界面的区域,例如:
使用
等机制将它们带入视野良好的视图倾向是高效的,并且自我记录 b / c它的设计直观用户:
最后你可以真正实现: 然后驱动......
控制器编码:在Archer的情况下:
任何自定义CALCULATED字段(服务器端控制器代码/构造) - 将其视为实际编写ASP页面的更受限制的版本。
通过始终将事物分开,你会:
<小时/>
答案 5 :(得分:0)
$(document).ready(function(){
$('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').hide();
});
OR
$(document).ready(function(){
$('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').css("display", "none");
});