我有一个按钮:
<button type="button" onclick = "myfunction()" class="collapsible">Expand content</button>
我有一个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
. 如果是RubyonRails呢?我注意到在RubyonRails中我不能以这种方式调用函数。如何从RubyonRails(html)调用函数?
1条答案
按热度按时间2q5ifsrm1#
对于新的rails应用程序,javascripts资产由webpack(通过webpacker gem)处理。默认情况下,webpack将函数隔离在定义函数的文件中,因此这些函数不会影响全局范围(web中的窗口对象)。
如果您希望浏览器在单击按钮时能够运行某个功能,则有许多选项,在您的情况下,您使用的是
onclick
属性,该属性将在全局范围内运行,因此它将尝试在窗口对象中执行函数。由于您的函数实际上是隔离的,浏览器无法调用它,因此解决方案是使函数全局化而不是隔离。
要做到这一点,请不要这样做:
您可以将函数定义为:
这样,该函数将在全局范围内可用,您可以在任何地方调用它。
虽然现在我更好地阅读了你的代码,你有一个奇怪的概念组合,你有
onclick="myFunction()"
但你没有定义myFunction
任何地方,然后在collapse
正在将eventlistener添加到按钮的函数。。。再一次?问题似乎不是你的按钮被点击了一次,而是collapse
函数从未被调用以实际附加事件侦听器。我会这样做:
然后你就不需要
onclick
在你的按钮上。