从外部HTML文件调用javascript函数
我在一个独立于HTML的文件中创建了一个函数,我想在我的select值更改时调用该函数,它确实这样做了,但它说函数没有定义。根据此错误:从外部HTML文件调用javascript函数,javascript,html,Javascript,Html,我在一个独立于HTML的文件中创建了一个函数,我想在我的select值更改时调用该函数,它确实这样做了,但它说函数没有定义。根据此错误: Uncaught ReferenceError:filterByClass未在HTMLSelectElement.onchange中定义(问题:149) 这是我的HTML,在这里进行调用: <select id="filter" onchange="filterByClass();"> <option value="{}">{}
Uncaught ReferenceError:filterByClass未在HTMLSelectElement.onchange中定义(问题:149)
这是我的HTML,在这里进行调用:
<select id="filter" onchange="filterByClass();">
<option value="{}">{}</option>
</select>
我知道我的代码可能不对,但那是因为我还在学习javascript
另外,我使用了browserify
来使用require,并将其转换为bundle.js
。
这是指向bundle.js
:
的头链接
顺便说一下,这是我第一次在单独的文件中使用javascript,因为我通常只是直接将代码放在头部。
<select id="filter" onchange="filterByClass">
<option value="{}">{}</option>
</select>
{}
取出filterByClass上的括号。如果调用它是有效的,那么调用它太早了。我假设,浏览器在解析
bundle.js时会遇到错误,并中止解析它(这更可能是因为客户端需要sqlite)。这就是为什么不能从HTML文件调用其中定义的函数
我建议您检查控制台,并解决是否显示任何错误或警告。我已经有一段时间没有使用browserify了,但它肯定会将您的代码包装到函数中
由于函数filterByClass(){
在全局范围内不可用,而onchange=“filterByClass();”
仅在全局范围内可用时才起作用
您可以在函数filterByClass(){
之后编写window.filterByClass=filterByClass
,然后此错误消息很可能就消失了,但您应该以这种方式解决问题,但可以使用addEventListener
而不是在HTML中设置事件处理程序
但是,虽然这可以解决错误消息,但仍然无法解决sqlite3
无法在浏览器中运行的问题。require('sqlite3')
表示这是一个在节点环境中运行的服务器端脚本。虽然web浏览器和节点都使用JavaScript,但它们都在完全不同的环境中运行。服务器端代码无法访问客户端元素/函数,反之亦然。@t.niese我知道我在使用browserify解决的问题中说过这个问题并不是造成问题的原因。sqlite3
不在浏览器中运行。Browserify不会对此进行任何更改,即使您解决了找不到filterByClass
的问题。我已经有一段时间没有使用Browserify了,但它肯定会将您的代码包装到一个函数中。由于函数filterByClass(){
在全局范围内不可用。只有在全局范围内可用的情况下,onchange=“filterByClass();”
才会起作用。您可以在函数filterByClass()之后编写window.filterByClass=filterByClass
{
然后这个错误消息很可能消失了,但是您应该使用addEventListener
而不是在HTML中设置事件处理程序。@t.niese将您的最后一条注释做成一个答案,这样我就可以将其标记为正确。如果在HMTL代码中使用属性设置事件侦听器,则在更改时分配给的值代码>将在事件发生时进行计算。因此在这种情况下onchange=“filterByClass();”
是正确的。
<select id="filter" onchange="filterByClass">
<option value="{}">{}</option>
</select>