首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从ruby-on-rails (HTML)调用函数?

如何从ruby-on-rails (HTML)调用函数?
EN

Stack Overflow用户
提问于 2021-07-08 23:29:07
回答 1查看 53关注 0票数 0

让我有一个按钮:

代码语言:javascript
复制
<button type="button" onclick = "myfunction()" class="collapsible">Expand content</button>

并且,我有一个JavaScript函数:

代码语言:javascript
复制
function collapse() {
    var coll = document.getElementsByClassName("collapsible");
    var i;

    for (i = 0; i < coll.length; i++) {
        coll[i].addEventListener("click", function() {
            this.classList.toggle("active");
            var content = this.nextElementSibling;
            if (content.style.display === "block") {
                content.style.display = "none";
            } else {
                content.style.display = "block";
            }
        });
    }
}

通常,我们使用onclick在HTML中调用JavaScript函数。如果是Ruby-on-rails呢?我注意到我不能在Ruby-on-rails中以这种方式调用函数。如何从ruby-on-rails (HTML)调用函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-09 22:52:07

对于新的Rails应用程序,JavaScripts资产由Webpack处理(通过Webpacker gem)。默认情况下,Webpack将函数隔离在定义该函数的文件中,因此这些函数不会侵犯全局范围(web中的窗口对象)。

如果您希望浏览器能够在单击按钮时运行函数,您有很多选择,在本例中,您使用的是onclick属性,该属性将在全局范围内运行,因此它将尝试在窗口对象中执行函数。

因为你的函数实际上是孤立的,所以浏览器不能调用它,所以一个解决方案是使函数全局而不是孤立。

这样做,而不是这样做:

代码语言:javascript
复制
function collapse() {
    ...
}

您可以将该函数定义为:

代码语言:javascript
复制
window.collapse = function() {
    ...
}

这样,该函数将在全局范围内可用,您可以从任何地方调用它。

虽然现在我更好地阅读了您的代码,但您有一个奇怪的概念组合,您有onclick="myFunction()",但您没有在任何地方定义myFunction,然后在collapse函数中,您向按钮添加了eventlistener……再次?问题似乎不在于按钮中的onclick,而是collapse函数从未被调用来实际附加事件侦听器。

我会这样做:

代码语言:javascript
复制
function collapse() {
    ...
}

collapse() // call the function so it attaches the event listeners

然后你就不需要在你的按钮上使用onclick了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68304540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档