代码之家  ›  专栏  ›  技术社区  ›  TimB

链接的单击事件

  •  1
  • TimB  · 技术社区  · 7 年前

    我有以下HTML和JavaScript:

    <!DOCTYPE html>
    <html>        
    <head>
        <script src="http://code.jquery.com/jquery-3.3.1.min.js"></script>
    </head>
    <body>
        <a href="#foo" id="bar">Something</a>
        <div id="foo></div>
        <script>
            $(function() {
                $link = $("#bar");
                $link[0].click(function() {
                    alert("Whatever.");
                });
            });
        </script>
    </body>
    </html>
    

    This article 解释方法。但是它不起作用-没有警报框显示。有什么想法吗?

    4 回复  |  直到 7 年前
        1
  •  1
  •   ewwink    7 年前

    这个 $link[0] 将返回本机元素而不是jquery对象,使用 onclick 事件或 addEventListener('click', ....)

    $(function() {
      $link = $("#bar");
      $link[0].onclick = function() {
        alert("Whatever.");
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <a href="#foo" id="bar">Something</a>
    <div id="foo"></div>

    使用jquery通过索引选择元素的正确方法是使用 eq()

    $(function() {
      $link = $("#bar");
      $link.eq(0).click(function() {
        alert("Whatever.");
      });
    });
    <script src=“https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js”></script>
    
    <a href=“foo”id=“bar”>某物</a>
    <DIV id=“foo”></DIV>

    请注意选择器 ID 将只返回1个元素,这样您就可以使用第二个或更大的索引。

        2
  •  2
  •   Nathan Champion    7 年前

    只需从代码中删除[0]数组索引,并确保关闭DIV ID引号:

    <html>        
    <head>
        <script src="http://code.jquery.com/jquery-3.3.1.min.js"></script>
    </head>
        <body>
            <a href="#foo" id="bar">Something</a>
            <div id="foo"></div>
            <script>
                $(function() {
                    $link = $("#bar");
                    $link.click(function() {
                        alert("Whatever.");
                    });
                });
            </script>
        </body>
    </html>
        3
  •  1
  •   Anlis    7 年前

    如果不想打开链接,但只警告任何文本,可以尝试编写类似这样的脚本:

    $('#bar').click(function(e) {
        e.preventDefault();
        alert('Whatever.');
    })
    
        4
  •  1
  •   Sushil    7 年前

    如果您正在使用 id 作为常见的选择器,请使用 class 对于普通选择器,您不需要执行类似的操作 $(id)[0] . 另外,在绑定完成后,养成取消绑定事件的习惯。

    $(function() {
        $link = $("#bar");
        $link.off('click').on('click', function() {
            let $this = $(this);
            let href = $this.attr('href');
            alert("href " + href);
        });
    });