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

时间:2018-10-18 08:51:10

标签: jquery ruby-on-rails

在细长格式的Rails视图文件中,我有:

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

这会导致渲染:

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

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

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

有效。在此方法中,我实际上要访问已按下的(jQuerified)按钮对象。我将方法更改为:

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

这会使浏览器在我按下按钮时挂起。

我的代码有什么问题,和/或jQuery方法中调用已按下的按钮对象的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

尝试添加事件侦听器并获取event.currentTarget

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

答案 1 :(得分:0)

在注释中,在@Satpal的帮助下,我想起了与原始代码相同的方法中的this将引用window对象。正如@muistooshort指出的那样,我需要指定type: "button"以避免将请求发送到Rails服务器。

我将代码更改为:

查看文件

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

JavaScript

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

我得到了我想要的。