'onclick' не работает с EJS и Node - PullRequest
       5

'onclick' не работает с EJS и Node

0 голосов
/ 29 августа 2018

Я создаю небольшое приложение Express с использованием EJS и пытаюсь получить функцию onclick для передачи значения выбранной опции. У меня 2 проблемы с этим, показанные ниже. Любая помощь с благодарностью!

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] } }

1 Ответ

0 голосов
/ 29 августа 2018
<%= console.log(this) %>

Выполняется console.log(this) немедленно, на сервере и печатает значение в источник страницы.

Если вы посмотрите на визуализированный HTML, вы увидите onclick="undefined", потому что это то, что console.log возвращает.

Вы хотите отобразить необработанный текст console.log(this) на странице, чтобы браузер видел его как (на стороне клиента) код Javascript.

...