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

按钮调用的方法中的“$(this)”使浏览器无响应

  •  0
  • sawa  · 技术社区  · 6 年前

    = button_tag("Press me", onclick: "$.foo();")
    

    从而导致渲染:

    <button name="button" type="submit" onclick="$.foo();">Press me</button>
    

    按下这个按钮,我只想执行jQuery方法,而不向Rails服务器发出任何请求。在一个要调用的JavaScript文件中,我通过执行以下操作确认了相应方法的正确调用:

    $.foo = function(){
      alert('foo');
    };
    

    这很管用。在这个方法中,我实际上想要访问已经按下的(jqueryized)按钮对象。我将方法更改为:

    $.foo = function(){
      alert($(this));
    };
    

    当我按下按钮时,浏览器就会挂起。

    2 回复  |  直到 6 年前
        1
  •  0
  •   kapantzak    6 年前

    尝试添加事件列表并获取 event.currentTarget

    <script>
        $(document).on('click', 'button[type="submit"]', function(event) {
            var btn = $(event.currentTarget);
            // ...
        });
    </script>
    
        2
  •  0
  •   sawa    6 年前

    在@Satpal的帮助下,我被提醒 this 在我的原始代码中将引用的方法中 window 对象。正如@muistooshort所指出的,我需要具体说明 type: "button" 以避免将请求发送到Rails服务器。

    查看文件

    = button_tag("Press me", type: "button", onclick: "$.foo(this);")
    

    $.foo = function(target){
      alert($(target));
    };
    

    我得到了我想要的。