为什么这个JavaScript函数不起作用?

时间:2013-05-22 14:35:45

标签: javascript function button twitter-bootstrap tabs

我正在使用bootstrap并尝试在标签1中创建一个“激活”(切换到)标签2的按钮。

这是我的代码:

HTML导航标签:

    <ul id="pageSwitcher" class="nav nav-tabs" style="width:100%;">
      <li><a href="#page1" data-toggle="tab">Page One</a></li>
      <li><a href="#page2" data-toggle="tab">Page Two</a></li>
    </ul>

HTML标签内容:

<div class="tab-content" style="width:100%;">
    <div class="tab-pane active" id="page1">
        <button type="button" onclick="showPageTwo();">Proceed to page 2</button>
    </div>
    <div class="tab-pane" id="page2">
        <p>Page 2 content here!</p>
    </div>
</div>

JavaScript的:

<script type="text/javascript">

$(document).ready(function() {
    $('#myTab a').click(function (e) {
        e.preventDefault();
        $(this).tab('show');
    }
});

function showPageTwo() {
    $('#pageSwitcher li:eq(1) a').tab('show');
}

</script>

有谁愿意提供一些有关我出错的地方的见解?我几乎完全复制了几个例子...... 点击标签本身工作正常,我似乎无法在页面1的底部创建一个激活第2页的按钮。

4 个答案:

答案 0 :(得分:2)

一个:糟糕的形式,内联点击通话......你不需要它,摆脱它:

        <button type="button">Proceed to page 2</button>

二:你有两个JS错误。您没有关闭.click()函数,并且您尝试使用li:eq(0)...

的说明符触发第一个选项卡
$(document).ready(function() {
    $('#myTab a').click(function (e) {
        e.preventDefault();
        $(this).tab('show');
        // ALSO, you were missing a closing paren, here!
    });

    //two issues ... onclick inside your button is trying to access
    // your function before it's available... inline js like that, bad idea anyhow
    // so hook into it inside your DOM ready code here anyhow.

    var showPageTwo = function() {
        // secondly, you're looking at the wrong item!
        // li:eq(0) means "look at the first li in the array of li"
        $('#pageSwitcher li:eq(1) a').tab('show');
    };

    $(".tab-content").on("click","#page1 button", showPageTwo);
});

有关工作示例,请参阅此jsFiddle:http://jsfiddle.net/mori57/Xr9eT/

答案 1 :(得分:1)

为您的按钮添加ID:

<div class="tab-content" style="width:100%;">
    <div class="tab-pane active" id="page1">
        <button type="button" id="myButton">Proceed to page 2</button>
    </div>
    <div class="tab-pane" id="page2">
        <p>Page 2 content here!</p>
    </div>
</div>

然后只触发右侧锚点的点击,其余部分由bootstrap执行:

$(document).ready(function() {
    $('#myTab a').on('click', function(e) {
        e.preventDefault();
        $(this).tab('show');
    });

    $('#myButton').on('click', function() {
        $('.nav-tabs li:eq(1) a').trigger('click');
    });
});

答案 2 :(得分:0)

您不应该为按钮使用特定代码,而应使用通用事件驱动的流程:
- 您应该在按钮中添加一个属性,以指定它将重定向到哪个页面
- 然后附加一个点击事件
- 将click事件附加到选项卡以执行相同的操作

HTML:

<button type="button" id="btn" gotoPage="#page2">Proceed to page 2</button>

JS处理标签切换:

function showPage(pageId){
    $('.tab-pane').each(function(){
        $(this).removeClass('active');
        $(this).hide();
    }); 
    $(pageId).show();
    $(pageId).addClass('active');
 }

(由于活跃的课程,你不确定你需要使用show或hide函数,如果CSS管理那些)

然后按下按钮:

$('#btn').click(function(){
    var destPage = $(this).attr('gotoPage');
    showPage(destPage);
});

对于标签:

$('#pageSwitcher a').each(function(){
    $(this).click(function(e){
        showPage($(this).attr('href'));
    });
});

如果需要,您可以在启动时加载第一页:

$(document).ready(function(){
    showPage("#page1");    // default: load page 1
});

示例:http://jsfiddle.net/DSbrj/1/

答案 3 :(得分:-1)

showPageTwo()应该在document.ready()调用之外声明。