切换事件中的jquery切换事件会产生意外行为

时间:2009-10-15 02:23:49

标签: jquery

$('button').toggle({
    function(e){
        //turn on effects for all elements clicked
        $('*').toggle(
            function(e){
                //some nice effects when you click on elements
            },
            function(e){
                //nice effects turned off when you click again.
            }
        );
    },

    function(e){
        // turn off all effects. aka unbind all click event
    });
});

它的表现并不像我预期的那样。我想基本上,在单击按钮时,单击元素时会打开效果。再次单击该元素时,它会关闭。单击按钮,禁用所有效果。

然而,我最终得到的是:

  • 点击按钮
  • 单击元素时
  • 效果已打开
  • 当我再次点击它时效果不会关闭。
  • 当我再次点击时,
  • 效果会关闭。

  • 点击按钮。
  • 效果已开启。
  • 再次点击按钮
  • 效果无法关闭。
  • 再次点击按钮
  • 效果关闭。

为什么要这样做?

1 个答案:

答案 0 :(得分:0)

我不确定我理解你要做的是什么,但我的建议是永远不要使用 $('*') 选择器。你真的,真的希望你的'效果'能够在页面中的每个DOM元素上运行吗?请记住,这包括“关闭/开启”按钮。

我构建了一个例子,我认为你正在尝试做什么:

<head>
    <title>Test</title>
    <style type="text/css">
        .effectsOn {
            border: 1px solid blue;
            cursor: pointer;
        }
    </style>
    <script src="jquery.js"></script>
    <script type="text/javascript">
        $(function() {
            $("#btnToggle").toggle(function() {
                // turn on effects for all elements clicked
                $("li").addClass("effectsOn").toggle(function() {
                    // some nice effects when you click on elements
                    alert("test");
                },
                function() {
                    // nice effects disabled when you click again
                    $(this).removeClass("effectsOn").unbind();
                });
            },
            function() {
                // turn off all effects; aka unbind all click event
                $("li").removeClass("effectsOn").unbind();
            });
        });
    </script>
</head>
<body>
    <input type="button" id="btnToggle" value="Toggle effects" />
    <ul>
        <li>This is like, you know, a test.</li>
        <li>This is like, you know, a test.</li>
        <li>This is like, you know, a test.</li>
        <li>This is like, you know, a test.</li>
    </ul>
</body>

这里的关键是使用“this”关键字来引用要切换的对象,并且(重申我上面所说的)不使用 $('*') 选择器。

这是你的意思吗?