Javascript 在找不到在getElementById之后搜索的函数时,如何防止js函数运行?
我有一个脚本,它在一个水平div上添加了一个顶部滚动条。该脚本必须将它添加到最多10个不同的div上。(从mainplh_BoautodStable1_divScrollContainer到mainplh_BoautodStable1_divScrollContainer) 为此,我调用脚本10次(以下是前3个示例)。但是,如果其中一个div丢失,则会中断脚本Javascript 在找不到在getElementById之后搜索的函数时,如何防止js函数运行?,javascript,Javascript,我有一个脚本,它在一个水平div上添加了一个顶部滚动条。该脚本必须将它添加到最多10个不同的div上。(从mainplh_BoautodStable1_divScrollContainer到mainplh_BoautodStable1_divScrollContainer) 为此,我调用脚本10次(以下是前3个示例)。但是,如果其中一个div丢失,则会中断脚本 doublescroll(document.getElementById('mainplh_boAutoOddsTable1_divSc
doublescroll(document.getElementById('mainplh_boAutoOddsTable1_divScrollContainer'));
doublescroll(document.getElementById('mainplh_boAutoOddsTable2_divScrollContainer'));
doublescroll(document.getElementById('mainplh_boAutoOddsTable3_divScrollContainer'));
例如,如果找不到mainplh_boautoodstable1_divScrollContainer,它会破坏我的Javascript。我怎样才能解决这个问题?例如,如果无法找到div元素,是否阻止函数运行
错误消息:
Uncaught TypeError: Cannot read property 'scrollWidth' of null
这是完整的javascript:
function doublescroll(element) {
var scrollbar= document.createElement('div');
scrollbar.appendChild(document.createElement('div'));
scrollbar.style.overflow= 'auto';
scrollbar.style.overflowY= 'hidden';
scrollbar.style.width= '506px';
scrollbar.firstChild.style.width= element.scrollWidth+'px';
scrollbar.firstChild.style.paddingTop= '1px';
scrollbar.firstChild.appendChild(document.createTextNode('\xA0'));
scrollbar.onscroll= function() {
element.scrollLeft= scrollbar.scrollLeft;
};
element.onscroll= function() {
scrollbar.scrollLeft= element.scrollLeft;
};
element.parentNode.insertBefore(scrollbar, element);
}
doublescroll(document.getElementById('mainplh_boAutoOddsTable1_divScrollContainer'));
doublescroll(document.getElementById('mainplh_boAutoOddsTable2_divScrollContainer'));
doublescroll(document.getElementById('mainplh_boAutoOddsTable3_divScrollContainer'));
doublescroll(document.getElementById('mainplh_boAutoOddsTable4_divScrollContainer'));
doublescroll(document.getElementById('mainplh_boAutoOddsTable5_divScrollContainer'));
doublescroll(document.getElementById('mainplh_boAutoOddsTable6_divScrollContainer'));
doublescroll(document.getElementById('mainplh_boAutoOddsTable7_divScrollContainer'));
doublescroll(document.getElementById('mainplh_boAutoOddsTable8_divScrollContainer'));
doublescroll(document.getElementById('mainplh_boAutoOddsTable9_divScrollContainer'));
doublescroll(document.getElementById('mainplh_boAutoOddsTable10_divScrollContainer'));
检查函数中是否存在
元素
:
function doublescroll(element) {
if(!element)
{
return false;
}
var scrollbar= document.createElement('div');
scrollbar.appendChild(document.createElement('div'));
scrollbar.style.overflow= 'auto';
scrollbar.style.overflowY= 'hidden';
scrollbar.style.width= '506px';
scrollbar.firstChild.style.width= element.scrollWidth+'px';
scrollbar.firstChild.style.paddingTop= '1px';
scrollbar.firstChild.appendChild(document.createTextNode('\xA0'));
scrollbar.onscroll= function() {
element.scrollLeft= scrollbar.scrollLeft;
};
element.onscroll= function() {
scrollbar.scrollLeft= element.scrollLeft;
};
element.parentNode.insertBefore(scrollbar, element);
}
if(!element)
{
return;
}
如果
getElementById
未找到元素,则返回null
在开始时检查您的函数
function doublescroll(element) {
if(element === null) {
return;
}
//rest of code here.
使您的代码更加健壮:
function doublescroll(element_id) {
var element = document.getElementById(element_id);
if (!element) return;
var scrollbar= document.createElement('div');
scrollbar.appendChild(document.createElement('div'));
scrollbar.style.overflow= 'auto';
scrollbar.style.overflowY= 'hidden';
scrollbar.style.width= '506px';
scrollbar.firstChild.style.width= element.scrollWidth+'px';
scrollbar.firstChild.style.paddingTop= '1px';
scrollbar.firstChild.appendChild(document.createTextNode('\xA0'));
scrollbar.onscroll= function() {
element.scrollLeft= scrollbar.scrollLeft;
};
element.onscroll= function() {
scrollbar.scrollLeft= element.scrollLeft;
};
element.parentNode.insertBefore(scrollbar, element);
}
doublescroll('mainplh_boAutoOddsTable1_divScrollContainer');
doublescroll('mainplh_boAutoOddsTable2_divScrollContainer');
doublescroll('mainplh_boAutoOddsTable3_divScrollContainer');
doublescroll('mainplh_boAutoOddsTable4_divScrollContainer');
doublescroll('mainplh_boAutoOddsTable5_divScrollContainer');
doublescroll('mainplh_boAutoOddsTable6_divScrollContainer');
doublescroll('mainplh_boAutoOddsTable7_divScrollContainer');
doublescroll('mainplh_boAutoOddsTable8_divScrollContainer');
doublescroll('mainplh_boAutoOddsTable9_divScrollContainer');
doublescroll('mainplh_boAutoOddsTable10_divScrollContainer');
在函数开始时检查元素:
function doublescroll(element) {
if(!element)
{
return false;
}
var scrollbar= document.createElement('div');
scrollbar.appendChild(document.createElement('div'));
scrollbar.style.overflow= 'auto';
scrollbar.style.overflowY= 'hidden';
scrollbar.style.width= '506px';
scrollbar.firstChild.style.width= element.scrollWidth+'px';
scrollbar.firstChild.style.paddingTop= '1px';
scrollbar.firstChild.appendChild(document.createTextNode('\xA0'));
scrollbar.onscroll= function() {
element.scrollLeft= scrollbar.scrollLeft;
};
element.onscroll= function() {
scrollbar.scrollLeft= element.scrollLeft;
};
element.parentNode.insertBefore(scrollbar, element);
}
if(!element)
{
return;
}
您可以在调用函数之前或之后检查是否存在。我想补充一点,任何修复该问题的解决方案都是可以接受的。包括在找不到元素时阻止脚本抛出错误。目前为止的所有答案都解决了您的问题。如果您希望整个过程停止,则需要检查函数的返回值,将所有函数调用封装到循环构造中,并在返回false时退出。谢谢大家!很难选择答案:)我已经选择了一个与我已经实施的确切解决方案。