在细长格式的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方法中调用已按下的按钮对象的正确方法是什么?
答案 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));
};
我得到了我想要的。