在我们的网络应用程序上有很多页面。其中一些包含元素" Ribbon.ListForm.Display.Manage.Workflows-Medium"有些页面没有。
我想使用相同的脚本来检查所有页面。该脚本将隐藏元素" Ribbon.ListForm.Display.Manage"," Ribbon.ListForm.Display.Manage.Workflows-Medium"和" Ribbon.ListForm.Display.Manage.CheckOut-Large"如果有的话。
function hideEdit() {
var edit = document.getElementById("Ribbon.ListForm.Display.Manage");
if (typeof edit !== "undefined" && edit.value == ''){edit.style.display = "none";};
var wf = document.getElementById("Ribbon.ListForm.Display.Manage.Workflows-Medium");
if (typeof wf !== "undefined" && wf.value == ''){wf.style.display = "none";};
var checkout = document.getElementById("Ribbon.ListForm.Display.Manage.CheckOut-Large");
if (typeof checkout !== "undefined" && checkout.value == ''){checkout.style.display = "none";};
}
问题是当一个页面不包含" Ribbon.ListForm.Display.Manage.Workflows-Medium" (第二个元素)但包含" Ribbon.ListForm.Display.Manage.CheckOut-Large" (第3个元素),脚本将在中间停止,错误[object is null or undefined]。因此,第一个元素被隐藏,但第三个元素不被隐藏。
请问您如何修改我的脚本?谢谢。
答案 0 :(得分:2)
因为getElementById()如果找不到元素,则返回null。
元素是对Element对象的引用,如果是元素则为null 具有指定ID的文件不在文档中。
您可以检查truthy值而不是使用typeof test
if (edit && edit.value == ''){edit.style.display = "none";};
演示:Fiddle
答案 1 :(得分:1)
你可以像这样检查null元素:
if (edit!=null && edit.value == '')
if (wf!=null && wf.value == '')
if (checkout!=null && checkout.value == '')
答案 2 :(得分:1)
因为问题用jQuery标记:
$('#Ribbon\.ListForm\.Display\.Manage,#Ribbon\.ListForm\.Display\.Manage\.Workflows-Medium,#Ribbon\.ListForm\.Display\.Manage\.CheckOut-Large')
.filter(function() {
return this.value == '';
})
.hide();
首先,它会选择你感兴趣的元素;然后,它将隐藏与基于值的简单过滤器匹配的那些。
答案 3 :(得分:1)
即使页面中不存在该元素,返回类型也将是对象,返回值将为null。 所以,你也可以查看空案例。 请参阅修改后的代码。
function hideEdit() {
var edit = document.getElementById("Ribbon.ListForm.Display.Manage");
if ( edit != null && typeof edit !== "undefined" && edit.value == ''){edit.style.display = "none";};
var wf = document.getElementById("Ribbon.ListForm.Display.Manage.Workflows-Medium");
if (wf != null && typeof wf !== "undefined" && wf.value == ''){wf.style.display = "none";}
var checkout = document.getElementById("Ribbon.ListForm.Display.Manage.CheckOut-Large");
if (checkout != null && typeof checkout !== "undefined" && checkout.value == ''){checkout.style.display = "none";}
}
感谢, VARUN。