MOOTOOLS 变量范围

发布于 2024-09-08 01:18:10 字数 313 浏览 3 评论 0原文

我正在使用穆工具: 我不知道在使用 addEvent 时如何使用变量。

我想使用 for next 循环来设置循环中的值:

for (x=0;x<num;x++){
var onclickText = 'function (){onclick="addPageMoveEvent('+x+'"); }';
$('pageNum'+x).addEvent('click', onclickText);
}

>

我搜索过论坛但没有找到任何帮助。

任何帮助都会很棒。

谢谢

I'm using mootools:
I can't figure out how to use a variable when using an addEvent.

I want to use a for next loop to set values in a loop:

for (x=0;x<num;x++){
var onclickText = 'function (){onclick="addPageMoveEvent('+x+'"); }';
$('pageNum'+x).addEvent('click', onclickText);
}

>

I've search forums but not found any help.

Any help would be great.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

南冥有猫 2024-09-15 01:18:10

MooTools 中的 addEvent 方法接受两个参数:

myElement.addEvent(type, fn);

参数:

  • type - (字符串)要监视的事件名称(“click”、“load”等),不带前缀“on”。
  • fn - (函数)要执行的函数。

它不接受字符串,并且传递诸如 "myFunction()""function() { myFunction(); }" 之类的字符串将不起作用。

由于您位于循环内,并且变量 x 将共享环境,因此您需要将其值包装在另一个闭包中。一种方法是使用额外的闭包:

$("pagenum" + x).addEvent("click", (function(value) {
    return function() { addPageMoveEvent(value); }
})(x));

查看 StackOverflow 上有关在其中创建闭包的特定问题的所有问题循环。

另外值得一看的是这篇 MDC 文章 - 在循环中创建闭包:常见的错误

The addEvent method in MooTools accepts two arguments:

myElement.addEvent(type, fn);

Arguments:

  • type - (string) The event name to monitor ('click', 'load', etc) without the prefix 'on'.
  • fn - (function) The function to execute.

It does not take a string and passing a string such as "myFunction()" or "function() { myFunction(); }" will not work.

Since you are inside a loop, and the variable x will share the environment, you need to wrap its value inside another closure. One way is to use an additional closure:

$("pagenum" + x).addEvent("click", (function(value) {
    return function() { addPageMoveEvent(value); }
})(x));

See all questions on StackOverflow regarding this particular problem of creating closures within loops.

Also worth checking out is this MDC article - Creating closures in loops: A common mistake

ㄟ。诗瑗 2024-09-15 01:18:10

警告:第一个示例将不起作用!请继续阅读以获取解释。

您将 onclick HTML 语法与 MooTools addEvent 混淆了。尝试一下

for (var x=0;x<num;x++){
    $('pageNum'+x).addEvent('click', 'addPageMoveEvent('+x+');');
}

,这更简单、更干净,但可能仍然达不到您想要的效果。每次单击链接时,此代码都会调用函数 addPageMoveEvent...这是您想要的吗?

由于 MooTools 不允许使用上述方法,因此您必须使用以下方法:

以编程方式实现相同目的的更有趣且危险性更小的方法是:

factory = function (x) { return function() { addPageMoveEvent(x); }; };
for (var x=0;x<num;x++){
    $('pageNum'+x).addEvent('click', factory(x));
}

这使用工厂创建保存 x 值的闭包...相当复杂的代码,但这是最纯粹的方式。它还避免使用由于向 addEvent 提供字符串而发生的可怕的 eval。 (看来 MooTools 无论如何都不喜欢其他选项。)

Warning: this first example will not work! Read on for an explanation.

You are confusing onclick HTML syntax with the MooTools addEvent. Try

for (var x=0;x<num;x++){
    $('pageNum'+x).addEvent('click', 'addPageMoveEvent('+x+');');
}

This is simpler and cleaner, but might still not do what you want. This code will call the function addPageMoveEvent every time the link is clicked... is that what you want?

Since MooTools doesn't allow the above method, you must use the following:

A programmatically more interesting and less hazardous way to do the same would be:

factory = function (x) { return function() { addPageMoveEvent(x); }; };
for (var x=0;x<num;x++){
    $('pageNum'+x).addEvent('click', factory(x));
}

This uses a factory for creating closures that hold your values of x... rather complex code, but it's the purist way. It also avoids using the scary eval that occurs because you feed addEvent a string. (It seems that MooTools doesn't like the other option anyway.)

¢好甜 2024-09-15 01:18:10

这是 mootools pass 方法的一个用例。

for (x=0;x<num;x++){
  $('pageNum'+x).addEvent('click', addPageMoveEvent.pass(x));
}

Pass 内部创建了一个闭包,将 x 保存在其范围内,因此当单击事件被触发时,它具有正确的值,因为它与 for 循环不同。

That a use case for mootools pass method.

for (x=0;x<num;x++){
  $('pageNum'+x).addEvent('click', addPageMoveEvent.pass(x));
}

Pass internally creates a closure that holds x in the his scope, so when the click event is fired it has the right value cause its not the same from the for loop.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文