如何从按钮触发javascript功能

时间:2015-03-07 06:18:25

标签: javascript php jquery html twitter-bootstrap

我一直在从谷歌下载bootstrap树列表片段。

它有javascript函数,看起来像这样



<script>$(function () {
    $('.tree li').on('click', function (e) {
        var children = $(this).find('> ul > li');
        if (children.is(":visible")) children.hide('fast');
        else children.show('fast');
        e.stopPropagation();
    });
});</script>
&#13;
&#13;
&#13;

因为我需要树列表只显示活动列表,所以我需要从列表中触发它,并检查此列表是否处于活动状态

我把它转换成这样,但仍然没有工作

&#13;
&#13;
function showHide(){
        var children = $(this).find('> ul > li');
        if (children.is(":visible")) children.hide('fast');
        else children.show('fast');
        e.stopPropagation();
};
&#13;
&#13;
&#13;

也可以在函数(e)和e.stopPropagation()

中向我解释e的功能是什么

这是完整的代码,以防有人问

&#13;
&#13;
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://snipplicious.com/css/bootstrap-3.2.0.min.css">
<style>
.tree li {
    margin: 0px 0;
    list-style-type: none;
    position: relative;
    padding: 20px 5px 0px 5px;
}
.tree li::before {
    content:'';
    position: absolute;
    top: 0;
    width: 1px;
    height: 100%;
    right: auto;
    left: -20px;
    border-left: 1px solid #ccc;
    bottom: 50px;
}
.tree li::after {
    content:'';
    position: absolute;
    top: 30px;
    width: 25px;
    height: 20px;
    right: auto;
    left: -20px;
    border-top: 1px solid #ccc;
}
.tree li a {
    display: inline-block;
    border: 1px solid #ccc;
    padding: 5px 10px;
    text-decoration: none;
    color: #666;
    font-family: arial, verdana, tahoma;
    font-size: 11px;
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
}
/*Remove connectors before root*/
 .tree > ul > li::before, .tree > ul > li::after {
    border: 0;
}
/*Remove connectors after last child*/
 .tree li:last-child::before {
    height: 30px;
}
/*Time for some hover effects*/

/*We will apply the hover effect the the lineage of the element also*/
 .tree li a:hover, .tree li a:hover+ul li a {
    background: #c8e4f8;
    color: #000;
    border: 1px solid #94a0b4;
}
/*Connector styles on hover*/
 .tree li a:hover+ul li::after, .tree li a:hover+ul li::before, .tree li a:hover+ul::before, .tree li a:hover+ul ul::before {
    border-color: #94a0b4;
}
</style>
<script src="http://snipplicious.com/js/jquery.js"></script>
<script src="http://snipplicious.com/js/bootstrap.min.js"></script>
<script>$(function () {
    $('.tree li').on('click', function (e) {
        var children = $(this).find('> ul > li');
        if (children.is(":visible")) children.hide('fast');
        else children.show('fast');
        e.stopPropagation();
    });
});</script>
</head>
<body>
<div class="container">
  <h1>Bootstrp tree view - click to hide</h1>
  <div class="tree">
    <ul>
      <li>
        <a href="#">Parent</a>
        <ul>
          <li>
            <a href="#">Child</a>
            <ul>
              <li>	<a href="#">Grand Child</a>
              </li>
            </ul>
          </li>
          <li>
            <a href="#">Child</a>
            <ul>
              <li><a href="#">Grand Child</a>
              </li>
              <li>
                <a href="#">Grand Child</a>
                <ul>
                  <li>	<a href="#">Great Grand Child</a>
                  </li>
                  <li>	<a href="#">Great Grand Child</a>
                  </li>
                  <li>	<a href="#">Great Grand Child</a>
                  </li>
                </ul>
              </li>
              <li><a href="#">Grand Child</a>
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </div>
</div>
</body>
</html>
&#13;
&#13;
&#13;

更新

&#13;
&#13;
<?php
    $num=0;
    if(isset($_GET['number'])){
        $num = $_GET['number'];
    }
?>
<!doctype html>
<html>
    <head>
        <title>Simple list</title>
    </head>
    <body>
        <ul>
            <li <?php if($num==1) {echo 'class="special"';}?>>
                one
                <ul class="sublist">
                    <li>1</li>
                    <li>2</li>
                    <li>3</li>
                </ul>
            </li>
            <li <?php if($num==2) {echo 'class="special"';}?>>
                two
                <ul class="sublist">
                    <li>1</li>
                    <li>2</li>
                    <li>3</li>
                </ul>
            </li>
            <li <?php if($num==3) {echo 'class="special"';}?>>
                three
                <ul class="sublist">
                    <li>1</li>
                    <li>2</li>
                    <li>3</li>
                </ul>
            </li>
            <li <?php if($num==4) {echo 'class="special"';}?> >
                four
                <ul class="sublist">
                    <li>1</li>
                    <li>2</li>
                    <li>3</li>
                </ul>
            </li>
        </ul>
        <script src="http://snipplicious.com/js/jquery.js"></script>
        <script type="text/javascript">
            $(function(){
                $('li.special').hide();
            });
        </script>
    </body>
</html>
&#13;
&#13;
&#13;  这是更简单的代码,但方法隐藏不起作用

1 个答案:

答案 0 :(得分:0)

您创建的showHide()函数无法正常工作,因为它在工作jQuery this中使用on('click', function(e){})。但是,在showHide() this引用

中的window对象时
$('.tree li').on('click', function (e) {
        // some code
});

this引用调用该函数的对象。此对象是一个与选择器'.tree li'匹配的树节点。

因此,如果您希望showHide()函数有效,则需要准确告诉它执行.find('> ul > li')的元素并隐藏可见子元素。 你有两种方法可以做到这一点。一种方法是将元素的选择器作为参数传递给函数,如下所示:

function showHide(elementSelector){
        var children = $(elementSelector).find('> ul > li');
        if (children.is(":visible")) children.hide('fast');
        else children.show('fast');
};

另一个是硬代码&#39;选择器可能不是那么实用

function showHide(){
        var children = $('.someClass').find('> ul > li');
        if (children.is(":visible")) children.hide('fast');
        else children.show('fast');
};

你的元素选择器(我的第一个例子中的elementSelector和我的第二个例子中的'.someClass')需要是一个有效的jQuery选择器,它取决于你,找到一个标记你的逻辑元素以某种方式使用这样的选择器来识别它们,因为我们不知道您的背景逻辑,并且目前不容易从HTML中选择唯一的节点,因为它们没有ID。给他们唯一的ID可能是识别它们的好方法。

至于您的第二个问题e是触发该功能的jQuery.Event,而e.stopPropagation()会阻止任何其他事件处理程序进一步通知此事件(请参阅{{3} })。