在 onclick 属性中使用咖啡脚本创建函数 [重复]

Posted

技术标签:

【中文标题】在 onclick 属性中使用咖啡脚本创建函数 [重复]【英文标题】:Use a coffeescript create function inside a onclick attribute [duplicate] 【发布时间】:2014-09-15 09:32:54 【问题描述】:

我从 rails 和 coffeescript 开始,但我现在遇到了一个奇怪的问题。 我想创建一个名为 log 的函数,我在我的 .coffee 中创建了这样的函数:

log = (message) -> console.log message

它是这样翻译成js的:

(function() 
  var log;

  log = function(message) 
    return console.log(message);
  ;

  log('Podcast downloader 2000');

).call(this);

如果我像在示例中调用的那样调用函数,它会起作用。 但现在我想使用 onclick="log('avb')

来调用它
<span onclick="log('abc')"/>

但该函数不在正确的范围内,因此不会被调用。

如何更改代码以便可以从 onclick 属性调用函数?

谢谢!

【问题讨论】:

内联事件处理不是好的做法——使用eventListener。并且只是提升功能? 【参考方案1】:

正如 Sterling 在评论部分所建议的那样,使用 onclick 不是一个好习惯,但如果您确实需要这样做,请将函数放在全局命名空间中

window.log = (message) -> console.log(message)

在这种情况下,最好为应用创建命名空间并在其中添加功能。

@MyNamespace = 

class MyNamespace.CommonFunctions
  @log = (message) -> console.log(message)

那么在你看来

<span onclick='MyNamespace.CommonFunctions.log("abc")'>

这样可以使事情井井有条,并且不会阻塞全局命名空间。

听众方法

更好的方法是使用事件监听器(使用 jquery)。

# view
<span class='msg'></span>

# js
log = (message) -> console.log(message)

$('.msg').on 'click', -> log('abc')

【讨论】:

以上是关于在 onclick 属性中使用咖啡脚本创建函数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在咖啡脚本中调用函数定义的方法

在咖啡脚本构造函数中绑定事件

使用脚本设置 onclick 事件

您如何在 Rails 3.1 中使用 Sprockets 编写干燥的模块化咖啡脚本?

在咖啡脚本中使用 es6 模块

CoffeeScript - 如何在 ruby​​ on rails 中使用咖啡脚本?