从外部HTML文件调用javascript函数

从外部HTML文件调用javascript函数,javascript,html,Javascript,Html,我在一个独立于HTML的文件中创建了一个函数,我想在我的select值更改时调用该函数,它确实这样做了,但它说函数没有定义。根据此错误: Uncaught ReferenceError:filterByClass未在HTMLSelectElement.onchange中定义(问题:149) 这是我的HTML,在这里进行调用: <select id="filter" onchange="filterByClass();"> <option value="{}">{}

我在一个独立于HTML的文件中创建了一个函数,我想在我的select值更改时调用该函数,它确实这样做了,但它说函数没有定义。根据此错误:

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>