javascript - “onclick”不适用于 EJS 和 Node

标签 javascript html node.js ejs

我正在使用 EJS 制作一个小型 Express 应用程序,并且我正在尝试获取 onclick函数来传递选定选项的值。我遇到了两个问题,如下所示。非常感谢任何帮助!

EJS供引用:

<select class="dropdown" onclick="<%= console.log(this) %>">
    <option disabled selected value> -- Select Environment -- </option>
    <% environments.forEach(env => { %>
        <option value="<%= env %>"><%= env %></option>
    <% }) %>
</select>

1) console.log()发生在页面加载时,但当我不断在选项之间单击时,实际上永远不会再次触发。

2) 所有文档都说 this.value应该返回选定的值,但是 this返回似乎是 Node 对象,与 <select> 无关.

{ console: [Getter],
  DTRACE_NET_SERVER_CONNECTION: [Function],
  DTRACE_NET_STREAM_END: [Function],
  DTRACE_HTTP_SERVER_REQUEST: [Function],
  DTRACE_HTTP_SERVER_RESPONSE: [Function],
  DTRACE_HTTP_CLIENT_REQUEST: [Function],
  DTRACE_HTTP_CLIENT_RESPONSE: [Function],
  COUNTER_NET_SERVER_CONNECTION: [Function],
  COUNTER_NET_SERVER_CONNECTION_CLOSE: [Function],
  COUNTER_HTTP_SERVER_REQUEST: [Function],
  COUNTER_HTTP_SERVER_RESPONSE: [Function],
  COUNTER_HTTP_CLIENT_REQUEST: [Function],
  COUNTER_HTTP_CLIENT_RESPONSE: [Function],
  global: [Circular],
  process:
   process {
     title: '  - nodemon  app.js',
     version: 'v8.9.3',
     moduleLoadList:
      [ <stuff> ],
     versions: { http_parser: '2.7.0',
  node: '8.9.3',
  v8: '6.1.534.48',
  uv: '1.15.0',
  zlib: '1.2.11',
  ares: '1.10.1-DEV',
  modules: '57',
  nghttp2: '1.25.0',
  openssl: '1.0.2n',
  icu: '59.1',
  unicode: '9.0',
  cldr: '31.0.1',
  tz: '2017b' },
     arch: 'x64',
     platform: 'win32',
     release:
      { <stuff> },
     env:
      { <stuff> },
     pid: 8532,
     features:
      { <stuff> },
     _needImmediateCallback: true,
     execPath: 'C:\\Program Files\\nodejs\\node.exe',
     debugPort: 9229,
     _startProfilerIdleNotifier: [Function: _startProfilerIdleNotifier],
     _stopProfilerIdleNotifier: [Function: _stopProfilerIdleNotifier],
     _getActiveRequests: [Function: _getActiveRequests],
     _getActiveHandles: [Function: _getActiveHandles],
     reallyExit: [Function: reallyExit],
     abort: [Function: abort],
     chdir: [Function: chdir],
     cwd: [Function: cwd],
     umask: [Function: umask],
     _kill: [Function: _kill],
     _debugProcess: [Function: _debugProcess],
     _debugPause: [Function: _debugPause],
     _debugEnd: [Function: _debugEnd],
     hrtime: [Function: hrtime],
     cpuUsage: [Function: cpuUsage],
     dlopen: [Function: dlopen],
     uptime: [Function: uptime],
     memoryUsage: [Function: memoryUsage],
     binding: [Function: binding],
     _linkedBinding: [Function: _linkedBinding],
     _setupDomainUse: [Function: _setupDomainUse],
     _events:
      { warning: [Function],
        newListener: [Function],
        removeListener: [Function],
        SIGWINCH: [Array] },
     _rawDebug: [Function],
     _eventsCount: 4,
     domain: null,
     _maxListeners: undefined,
     _fatalException: [Function],
     _exiting: false,
     assert: [Function],
     config: { target_defaults: [Object], variables: [Object] },
     emitWarning: [Function],
     nextTick: [Function: nextTick],
     _tickCallback: [Function: _tickCallback],
     _tickDomainCallback: [Function: _tickDomainCallback],
     stdout: [Getter],
     stderr: [Getter],
     stdin: [Getter],
     openStdin: [Function],
     exit: [Function],
     kill: [Function],
     argv0: 'node',
     mainModule:
      Module {
        id: '.',
        exports: [Object],
        parent: null,
        filename: <stuff>,
        loaded: true,
        children: [Array],
        paths: [Array] },
     _immediateCallback: [Function: processImmediate] },
  Buffer:
   { [Function: Buffer]
     poolSize: 8192,
     from: [Function],
     alloc: [Function],
     allocUnsafe: [Function],
     allocUnsafeSlow: [Function],
     isBuffer: [Function: isBuffer],
     compare: [Function: compare],
     isEncoding: [Function],
     concat: [Function],
     byteLength: [Function: byteLength],
     [Symbol(node.isEncoding)]: [Function] },
  clearImmediate: [Function],
  clearInterval: [Function],
  clearTimeout: [Function],
  setImmediate: { [Function: setImmediate] [Symbol(util.promisify.custom)]: [Function] },
  setInterval: [Function],
  setTimeout: { [Function: setTimeout] [Symbol(util.promisify.custom)]: [Function] } }

最佳答案

<%= console.log(this) %>

这会在服务器上立即执行 console.log(this) ,并将值打印到页面源。

如果您查看呈现的 HTML,您将看到 onclick="undefined",因为这就是 console.log 返回的内容。

您希望将原始文本 console.log(this) 渲染到页面,以便浏览器将其视为(客户端)Javascript 代码。

关于javascript - “onclick”不适用于 EJS 和 Node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52067657/

相关文章:

node.js - 循环内的异步调用

javascript - 具有 2 个条件的 NG-grid 过滤器

javascript - 光滑 slider 多个 slider 保持事件位置

html - 我希望我的主页在视觉上分为两个全 View 屏幕,全高

html - 步进进度条在手机上是水平的

javascript - 如何修复 "event.bind is not a function"?

javascript - 绑定(bind)的输入值未出现在请求中

javascript - 看似有效的 JSON 上的 JSON.parse 错误

javascript - 如何访问 firefox 浏览器的 object.style.filter?

javascript - Node writeFileSync 未写入文件