0

好的,所以我在表单中有这个

<INPUT type="text" name="inputbox" value="">
<INPUT TYPE="button" NAME="button2" Value="Write" onClick="writeText(this.form)">

我有以下从咖啡脚本生成的javascript

(function() {
  var writeText;

  writeText = function(form) {
    return form.inputbox.value = "ping";
  };

}).call(this);

我需要知道如何调用 writeText?

因为当我单击按钮时没有任何反应......如果我删除 function(){}.call(this) 包装器,它就可以工作。

我无法移除包装纸。我需要知道如何使用 .call(this) 调用 writeText。

4

1 回答 1

1

这是一个作用域问题,Coffeescript 将所有内容都包装在它自己的闭包中,以避免污染全局命名空间。有两种解决方案;

  1. 使用 coffeescript 的“--bare”选项进行编译(首先避免将包装器放在那里)。

  2. 将您的咖啡脚本函数绑定到浏览器在运行时看到的某个对象。像这样:

window.writeText = (form) -> form.inputbox.value = "ping"

在第二个选项中,您的 writeText 函数绑定到浏览器中的 window 对象,这是this您的脚本在浏览器中运行时的隐式对象。

于 2012-07-28T19:28:02.263 回答