Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
执行onLoad函数时出现Javascript选项卡错误_Javascript_Tabs - Fatal编程技术网

执行onLoad函数时出现Javascript选项卡错误

执行onLoad函数时出现Javascript选项卡错误,javascript,tabs,Javascript,Tabs,我有一个使用Tabber.js的网页。我想能够链接到一个页面,并有它切换到正确的选项卡,以便所需的内容显示 我添加了以下JS代码来选择选项卡(为了简化示例,硬编码到第三个选项卡): 如果我在表单中添加一个按钮以运行SelectTab(),它将正常工作,页面将切换到所需的选项卡。问题是我希望在加载页面时发生这种情况。(我不能在HTML主体标记中使用“onload”,因为它会像预期的那样在创建选项卡之前运行。)因此我想在加载选项卡之后使用tabber.js“onload”选项来运行脚本。为此,我做了

我有一个使用Tabber.js的网页。我想能够链接到一个页面,并有它切换到正确的选项卡,以便所需的内容显示

我添加了以下JS代码来选择选项卡(为了简化示例,硬编码到第三个选项卡):

如果我在表单中添加一个按钮以运行SelectTab(),它将正常工作,页面将切换到所需的选项卡。问题是我希望在加载页面时发生这种情况。(我不能在HTML主体标记中使用“onload”,因为它会像预期的那样在创建选项卡之前运行。)因此我想在加载选项卡之后使用tabber.js“onload”选项来运行脚本。为此,我做了以下工作:

<script language="javascript" type="text/javascript">
var tabberOptions = {'onLoad':function(){SelectTab();}};
</script>

<script type="text/javascript" src="tabber.js"></script>

var tabberOptions={'onLoad':函数(){SelectTab();}};
一旦我这样做了,我的代码就会中断。具体来说,我得到了一个错误:
TypeError:document.getElementById(…).tabber未定义

这发生在SelectTab函数中;执行行“cp1”,但不执行“cp2”。然而,失败的不仅仅是“onLoad”;如果已定义onLoad来运行该函数,则单击调用该函数的按钮调用SelectTab时也会失败

如果我将tabber onLoad选项更改为:
var tabberOptions={'onLoad':函数(){alert(“Tabber-Loaded”);}; …然后,手动调用SelectTab功能时,它会再次工作。我还尝试更改tabber onLoad选项以调用不同的函数,但它仍然破坏了SelectTab()代码


关于为什么在加载tabber.js时定义要执行的函数会导致这种行为,您有什么想法吗?

尝试交换脚本的顺序

<script type="text/javascript" src="tabber.js"></script>
<script language="javascript" type="text/javascript">
    var tabberOptions = {'onLoad':function(){SelectTab();}};
</script>

var tabberOptions={'onLoad':函数(){SelectTab();}};

我放弃了让tabberOptions“onload”工作。我能说的最好的原因是:一旦调用它,为tabber选项卡定义的“div”就不再有效。我确实在“tabber.js”脚本中找到了代码,它删除了父div“…以防止内存泄漏…”(代码中的注释),这似乎阻止了tabberOptions和操纵选项卡的脚本共存

因此,我尝试了一种不同的方法,似乎有效:

<script language="javascript" type="text/javascript">
var tabberLoaded = false;
var tabLoadIntervalId = setInterval("SelectTab()", 100);

function SelectTab() {
   if ( tabberLoaded == true ) {
      // alert("SelectTab started"); /*---- debugging cp1 ----*/
      document.getElementById('myTab1').tabber.tabShow(2);
      // alert("SelectTab done");    /*---- debugging cp2 ----*/
      clearInterval(tabLoadIntervalId);
   }
}

这样做使我的页面正常工作。我想做更多的测试,并确保我在tabber.js中选择了最好的位置来设置标志。

好的,只有当“tabber”完全加载时,才能更改所选选项卡。要确保所有内容都已加载,请在jQuery中的窗口上使用
.load()
事件

<script language="javascript" type="text/javascript">
$(window).load(function(){
    document.getElementById('myTab').tabber.tabShow(2);
});
</script>

$(窗口)。加载(函数(){
document.getElementById('myTab').tabber.tabShow(2);
});

它就像一个符咒

交换脚本的顺序可以让SelectTab()脚本在手动运行时再次工作,但onLoad也不会执行,因此它实际上给出了与删除onLoad选项相同的行为。将脚本放在页面底部(之后)可能会有所帮助。tabber.js非常古老(2006年)也许Jquery选项卡可能更好,重新定位脚本似乎没有帮助。我试过了,也就是在它之前和之后。我看了jQuery,可能需要考虑如果我不能获得Tabb.js的正确工作,切换到JQuery。尽管我希望尽可能避免彻底检修,尤其是因为我是免费做这个网站的。
<script type="text/javascript" src="tabber.js"></script>
<script language="javascript" type="text/javascript">
    var tabberOptions = {'onLoad':function(){SelectTab();}};
</script>
<script language="javascript" type="text/javascript">
var tabberLoaded = false;
var tabLoadIntervalId = setInterval("SelectTab()", 100);

function SelectTab() {
   if ( tabberLoaded == true ) {
      // alert("SelectTab started"); /*---- debugging cp1 ----*/
      document.getElementById('myTab1').tabber.tabShow(2);
      // alert("SelectTab done");    /*---- debugging cp2 ----*/
      clearInterval(tabLoadIntervalId);
   }
}
/* If the user specified an onTabDisplay function, call it now. */
if (typeof this.onTabDisplay == 'function') {
this.onTabDisplay({'tabber':this, 'index':tabberIndex});
}

tabberLoaded = true; /* This is the added line */
return this;
<script language="javascript" type="text/javascript">
$(window).load(function(){
    document.getElementById('myTab').tabber.tabShow(2);
});
</script>