Отправка параметра из формы в функцию в JavaScript

Я пытаюсь отправить значение из формы в новое окно, которое открывается. В моей программе окно открывается, но значение val2 не отправляется, а вместо него существует null.

Мой код:

function eq(value) {
  ViewImg = window.open('http://localhost/coord.php?' + value, 'ViewImg', 'width=<?php print $realWidthNewWindow; ?>,height=<?php print $realHeightNewWindow; ?>', 'status=no', 'titlebar=0');
}
<form id='testform_eq' name='testform_new'>
  <input type='text' id='val2' name='val2'>
  <input type='button' value='Submit' onclick='eq(document.getElementById(val2))'>
</form>

Кто-нибудь знает, почему это так? Спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
81
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Потому что вы должны сделать это так: document.getElementById("val2").value

document.getElementById(val2) неверно, если вы хотите получить значение id=val2.

Чтобы исправить это, вы можете заменить eq(document.getElementById(val2) на eq(document.getElementById("val2").value)

function eq(value) {
  ViewImg = window.open('http://localhost/coord.php?' + value, 'ViewImg', 'width=<?php print $realWidthNewWindow; ?>,height=<?php print $realHeightNewWindow; ?>', 'status=no', 'titlebar=0');
  console.info(value);
}
<form id='testform_eq' name='testform_new'>
  <input type='text' id='val2' name='val2'>
  <input type='button' value='Submit' onclick='eq(document.getElementById("val2").value)'>
</form>

или просто поместите идентификатор в вызов функции: eq(val2)

function eq(id) {
  ViewImg = window.open('http://localhost/coord.php?' + id.value, 'ViewImg', 'width=<?php print $realWidthNewWindow; ?>,height=<?php print $realHeightNewWindow; ?>', 'status=no', 'titlebar=0');
  console.info(id.value);
}
<form id='testform_eq' name='testform_new'>
  <input type='text' id='val2' name='val2'>
  <input type='button' value='Submit' onclick='eq(val2)'>
</form>

Это ничего не изменит. Он по-прежнему вызывает eq() с неопределенным значением, но затем записывает правильное значение в консоль. Вы указали на ошибки в коде, но ничего не сделали, чтобы это исправить.

Reinstate Monica Cellio 08.04.2019 13:21

@Archer Это то, что я собираюсь сделать. Чтобы показать, кто из них должен это сделать. Я обновился с рабочей функцией.

Shinjo 09.04.2019 03:59
Ответ принят как подходящий

Если вы хотите передать значение ввода, вы должны принять во внимание две вещи:

  1. getElementById принимает строку, но вы пытаетесь передать несуществующую переменную
  2. Если вы хотите передать значение, а не элемент, вы должны добавить .value после элемента

И, наконец, у вас должен получиться такой элемент input:

<input type='button' value='Submit' onclick='eq(document.getElementById("val2").value)'>

Вот живой пример:

<script>
function eq(value) {
  console.info(value);
  ViewImg = window.open('http://localhost/coord.php?' + value, 'ViewImg', 'width=<?php print $realWidthNewWindow; ?>,height=<?php print $realHeightNewWindow; ?>', 'status=no', 'titlebar=0');
}
</script>

<form id='testform_eq' name='testform_new'>
  <input type='text' id='val2' name='val2'>
  <input type='button' value='Submit' onclick='eq(document.getElementById("val2").value)'>
</form>

Другой вариант — получить значение внутри функции, как описано здесь. Этот способ хорош, если вы не собираетесь повторно использовать eq с разными значениями. Вы должны выбрать один из них в зависимости от вашего реального случая.

У вас есть идея, как отправить 2 поля, а не одно поле?

Oz1988 08.04.2019 13:36

Конечно, если вам нужно, вы можете просто передать несколько значений (если вы хотите работать с параметрами) или вместо этого получить оба значения внутри функции.

Commercial Suicide 08.04.2019 13:39

Так ? <input type='button' value='Submit' onclick='eq(document.getElementById("val2").value,"val3").va‌​lue)'></form>

Oz1988 08.04.2019 13:42

Если вы пытаетесь получить значение из другого ввода, оно должно выглядеть так: eq(document.getElementById("val2").value, document.getElementById("val3").value). Но лучше переместить эту логику для получения значений внутри JS-файла и не захламлять свой HTML.

Commercial Suicide 08.04.2019 13:53

Как насчет функции eq(value) { ? Там тоже нужно изменить количество параметров? Откуда он знает разницу между ценностью и ценностью?

Oz1988 08.04.2019 14:00

Вы правы, взгляните на мой предыдущий комментарий, я передаю там 2 параметра, вам просто нужно обработать оба внутри метода eq

Commercial Suicide 08.04.2019 14:45

function eq() {
  const value = document.getElementById('val2').value;
  ViewImg = window.open('http://localhost/coord.php?' + value, 'ViewImg', 'width=<?php print $realWidthNewWindow; ?>,height=<?php print $realHeightNewWindow; ?>', 'status=no', 'titlebar=0');
}
<form id='testform_eq' name='testform_new'>
  <input type='text' id='val2' name='val2'>
  <input type='button' value = "Submit" onclick='eq()'>
</form>

Вам не нужно ничего передавать функции щелчка. Поскольку у вас уже есть атрибут id для вашего элемента ввода, вы можете получить значение ввода, когда щелкнете по нему. Вероятно, вы захотите использовать эту функцию в других местах, и это будет означать, что вам придется передавать каждый раз этот элемент.

Если вы действительно хотите что-то передать, вы можете передать сам идентификатор.

eq('val2')

Функция eq будет выглядеть так:

function eq(id){
  const value = document.getElementById(id).value;
  ....
}

Затем вы можете использовать эту функцию в других местах на других входах.

Можно было бы с объяснением, но это правильный ответ (из тех, что пока)

Reinstate Monica Cellio 08.04.2019 13:22

Я вижу разницу только в получении значения, в этом ответе оно находится внутри функции вместо передачи значения в качестве параметра. Я думаю, это дело вкуса, особенно если вы хотите использовать одну и ту же функцию только для открытия и передачи разных значений внутри.

Commercial Suicide 08.04.2019 13:25

Я отредактировал ответ, и, вероятно, теперь это будет иметь больше смысла.

Nicolae Maties 08.04.2019 13:28

Другие вопросы по теме