在 Parcel 构建期间在 HTML 文件中调用时,JavaScript 函数不会触发

2023-12-29

我有一个链接到 JavaScript 文件的基本 HTML 表单页面。这两个文件都存在于 Node 项目中,我使用 Parcel 作为捆绑器(因为我最终想将其转换为 TypeScript)。

当我在浏览器中运行html文件时,JavaScript函数将触发,但是当我运行Parcel构建时,index.html将编译,但JavaScript函数不会触发。它识别js文件,因为我可以在函数外部调用dom查询。

当我检查控制台时,出现错误:

(index):12 Uncaught ReferenceError: validationFunction is not defined
    at HTMLInputElement.onchange

但这没有意义,因为该函数是在 Parcel 构建之外定义的。

使用 Parcel 编译时如何让 index.html 页面识别 JavaScript 函数?

index.js 文件如下:

function validationFunction(event) {
  event.preventDefault();
  var div;
  div = document.getElementById("appendedText");
  div.innerHTML += "hello world";
}

index.html 是:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
</head>

<body>
    <form action="" method="post">
        First name:<br />
        <input onChange="validationFunction(event)" type="text" name="firstname" /><br />
        <input type="submit" name="Submit" />
    </form>
    <h1></h1>
    <div id="appendedText"></div>
    <script src="index.js"></script>
</body>

</html>

package.json 是:

{
  "name": "typescriptprojects",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "parcel index.html"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "typescript": "^3.5.3"
  },
  "dependencies": {
    "parcel-bundler": "^1.12.3"
  }
}

默认情况下,parcel js 包在全局命名空间中不可用。

您可以将函数直接附加到窗口对象,然后您的代码应该按原样工作:

window.validationFunction = function validationFunction(event) {
  event.preventDefault();
  var div;
  div = document.getElementById("appendedText");
  div.innerHTML += "hello world";
}

或者使用全局标志导出命名模块:

// package.json
"scripts": {
    "dev": "parcel index.html --global myCustomModule"
  },

// index.js
module.exports.validationFunction= function validationFunction(event) {
  event.preventDefault();
  var div;
  div = document.getElementById("appendedText");
  div.innerHTML += "hello world";
}

// or alternatively index.ts
export function validationFunction(event) {
  event.preventDefault();
  var div;
  div = document.getElementById("appendedText");
  div.innerHTML += "hello world";
}

// index.html
<input onChange="myCustomModule.validationFunction(event)" type="text" name="firstname" /><br />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Parcel 构建期间在 HTML 文件中调用时,JavaScript 函数不会触发 的相关文章

  • 如何使用 jQuery 通过单击按钮来选择下拉列表中的所有值?

    如何通过在 JavaScript 中使用 jQuery 单击按钮来选择下拉列表中的所有值 function select children option attr selected selected 应该做 当然你需要一个SELECT具有属
  • AngularJS Youtube 播放器嵌入非常大的播放列表

    我目前正在构建一个 AngularJS 应用程序 我知道它有点过时 但我对它很有信心 我的应用程序需要嵌入一个 YouTube 播放器 其中包含一个非常大的播放列表 大约 1500 个项目 但我无法对其进行编码 以便它实际上可以嵌入超过 2
  • 有什么简单的方法可以清理 Google Maps v3 API 上的所有标记、折线和其他叠加层吗?

    我想获得一张新地图 而不是使用刷新网页 thanks 并有简单的方法来获取地图上的所有叠加层 在 v2 API 中 有clearOverlays http code google com apis maps documentation ja
  • 使用 Sequelize.js 和 PostgreSQL 查询关联模型上的 JSONB 字段

    我有我的两个模型Foo and Bar Foo有一个字段barId 因此有一个Bar与其关联的对象 我可以查询我所有的Foo对象并包括它们的关联Bar对象如此 我正在使用 TypeScript续集打字稿 https github com R
  • javascript 代码只能在函数之外工作 - 为什么?

    为什么这段代码不能像下面写的那样工作 但如果我注释掉function testBgChange 并将代码保留在该函数内 它可以正常工作 如果我将代码保留在函数中然后调用该函数 会有什么区别
  • 谷歌地图API v3如何获取所有形状的坐标

    我有这个谷歌脚本 可以创建形状和删除形状 但没有太多关于保存形状的信息 我查了一下互联网 知道我可以通过 overlaycomplete 中的 getpaths 访问路径坐标 而且我还可以将坐标推入一个收集所有形状的数组中 但是 如果用户删
  • 为什么 "asdf".replace(/.*/g, "x") == "xx" ?

    我偶然发现了一个令人惊讶的 对我来说 事实 console log asdf replace g x Why two替代品 似乎任何没有换行符的非空字符串都会产生此模式的两个替换 使用替换函数 我可以看到第一个替换是整个字符串 第二个替换是
  • 变量值的 swap() 函数[重复]

    这个问题在这里已经有答案了 我无法达到下面这个交换函数的预期结果 我希望将值打印为 3 2 function swap x y var t x x y y t console log swap 2 3 任何线索将不胜感激 您的函数正在内部交
  • 禁用 iframe 中的滚动

    有没有办法在 iframe 中禁用所有滚动 我有一个 iframe 其中内容超出了 iframe 尺寸 设置scrolling no 只会删除滚动条 但不会禁用滚动 我无法控制 iframe html 的头部 所以我无法设计它的样式 有任何
  • iOS 11 getUserMedia 不起作用?

    苹果公司发表声明称getUserMedia将在 iOS 11 上完全正常运行 安装 iOS 11 Beta 版本 5 后 我确实收到一条消息 表明我的网站请求访问我的相机和麦克风 但似乎是这样的 video src window URL c
  • 路由和干净路径(无主题标签)在 angularJS 中不起作用

    伙计们 这让我发疯了 我为此奋斗了几个小时 却找不到解决方案 我知道为了从 URL 路径中清除主题标签 我需要使用 locationProvider html5Mode true 但由于某种原因 这对我来说效果不佳 我使用 tomcat 7
  • Angular 8 webpack-bundle-analyzer 寻找错误的polyfill 文件

    无论我做什么 构建项目后我都会收到以下错误 Error parsing bundle asset
  • “WebSocket 在连接建立之前已关闭”是什么意思?

    我正在使用 JavaScript 和联盟平台 http www unionplatform com我该如何诊断这个问题 非常感谢 如果你去http jsbin com ekusep 6 edit http jsbin com ekusep
  • CSS交付优化:如何推迟CSS加载?

    我在尝试着优化 CSS 交付遵循针对开发人员的谷歌文档https developers google com speed docs insights OptimizeCSSDelivery example https developers
  • 从另一台服务器读取 Node.js 中的大文件

    我有两台相互通信的服务器 Server1 向 Server2 请求文件的部分内容 并将收到的数据存储到一个文件中 Server2 应该接收每个请求并创建一个流管道传输数据 假设服务器2中存储的文件 目录 如下 bigfile gz bigf
  • 如何在不刷新页面的情况下更新页面 html 和 url

    我想知道是否有人可以指出我学习如何在不刷新页面的情况下更新页面 html 和 url 的方向 是否有任何现有的 javascript 库可以处理这个问题 或者有一本涵盖此类事情的好书 这是使用该效果的示例网站 http onedesignc
  • 如何删除 node_modules - Windows 中的深层嵌套文件夹

    尝试删除后节点模块创建的目录npm install 源文件名大于文件支持的名称 系统 尝试移动到路径名称较短的位置 或者尝试 在尝试此操作之前重命名为较短的名称 I also tried shift delete and still hav
  • 如何防止IE11弹出(您确定要离开此页面)

    我正在处理一个页面 除了一个下拉菜单可供选择外 我无需输入任何内容 但在 IE11 中 当我尝试转到下一页时 它会弹出该消息 我想阻止这种弹出的发生 所以我只是想知道 IE11 中弹出窗口的默认行为是什么 因为它不会出现在 Chrome 或
  • 如何在jsp页面中包含javascript

    我是 J2EE 和 Web 开发的新手 这是我的问题 我想在网页中包含 angular js 这是有效的版本 但我也想要一些本地的 javascript 文件 并且希望我想在本地目录中导入 angularjs
  • Microsoft SQL 数据库的 WebSocket 侦听器

    我目前正在开发一个项目 该项目必须使用 WebSockets 作为将数据传输到客户端的方式 基础设施看起来像这样 客户端 gt Web 服务器 gt Microsoft SQL 数据库 我想最理想的情况应该是这样的 客户端打开一个到服务器的

随机推荐