Отправить динамическую форму с помощью JQuery

Я не совсем уверен, что смогу это сделать, но попробовать стоит.

У меня есть таблица по крайней мере с 10 элементами из базы данных Mysql. Это предметы, за которые вы можете делать ставки. Идея состоит в том, что в каждой строке (а значит, и в каждом элементе) есть кнопка, по которой можно щелкнуть, чтобы ввести ставку. Эта кнопка открывает всплывающее окно с текстовым полем для ввода ставки и кнопкой для отправки формы.

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

Вот что у меня есть:

$(document).ready(function(){
 $(".show").click(function() {
   $("#popup").show();
   	  var $id = document.getElementsByClassName('show')[0].value;
   	  console.info($id);
   	  $("#jugador").val($id);
 });

 $("#close, #submit").click(function() {
   $("#popup").hide();
 });
});
#popup {
  position: relative;
  z-index: 100;
  padding: 10px;
}

.content {
  position: absolute;
  z-index: 10;
  background: #ccc;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

.overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background: #000;
  z-index: 5;
  opacity: 0.4;
}
<td><button class = "show" id = "bid" value = "<?php echo $row2["id"];?>"><img src = "pictures/bidIcon.png" width = "30" height = "30"></button></td>

/*Popup*/

<div id = "popup" style = "display: none;">
 <div class = "overlay"></div>
  <div class = "content">
    <header>
     <div id = "close">✖</div>
    </header>
    <form name = "form1" method = "post" action = "bid.php">
     <fieldset>
      <label for = "bid">Bid:</label>
      <input type = "text" name = "bidAmount" id = "bidAmount" size = "8" />
      <input type = "hidden" name = "item" id = "item" />
      <input type = "submit" tabindex = "-1" style = "position:absolute; top:-1000px">
    </fieldset>
    <footer>
    <button type = "button" id = "submit">Bid Now</button>
    </footer>
   </form>
  </div>
</div>

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

Возможно ли то, что я хочу? Это правильный подход? Стоит ли использовать другой?

Заранее большое спасибо.

У вас есть несколько кнопок ставок? Вы всегда выбираете первый элемент с классом, разве вам не нужен тот, который находится внутри нажатой кнопки?

epascarello 22.05.2018 13:55

сгенерировать динамические идентификаторы, а затем передать кнопку, например <button id = "dynamicid by php" onsubmit = "func (this.id)">

Shubh 22.05.2018 13:58
Поведение ключевого слова "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
2
64
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Просто измените эту строку:

var $id = document.getElementsByClassName('show')[0].value;

К этому:

var $id = $(this).val();

Проблема в том, что с document.getElementsByClassName('show')[0].value вы запрашиваете первое появление кнопки .show. С $(this) вместо этого вы будете получать доступ к текущей нажатой кнопке.

JQuery связывает события с целью, к которой вы прикрепляете событие, поэтому this всегда будет ссылкой на цель события. Использование $(this) создаст объект jQuery целевого элемента, позволяющий применять функции jQuery к элементу.

В качестве примечания: вы не должны дублировать идентификаторы элементов. Каждый идентификатор должен быть уникальным в html-документе, поэтому рекомендуется сделать этот идентификатор различным для каждой кнопки.

Надеюсь, поможет.

Я даже не знаю, что сказать. Я очень любитель JQuery / Javascript, и я сходил с ума ... Большое спасибо, муэкас.

saysmus 22.05.2018 14:03

@saysmus без проблем. Я рада, что смогла тебе помочь.

muecas 22.05.2018 14:06

Чтобы получить доступ к идентификатору текущего элемента div, вы можете использовать ($this), который относится к текущему объекту javascript.

$("div").click(function(){
 alert($(this).attr('id'));
});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id = "1">Num 1</div>
<div id = "2">Num 2</div>
<div id = "3">Num 3</div>
<div id = "4">Num 4</div>

Здесь, в этом примере, я создал div, который при нажатии возвращает идентификатор этого div.

Когда вы делаете это так, как этот var $id = document.getElementsByClassName('show')[0].value;, он всегда будет принимать первый элемент с class = "show".
. Который будет содержать первый элемент, следовательно, всегда дает id первого элемента. Поэтому вместо того, чтобы делать это так, вы можете сделать это так:

var $id = $(this).val();

Это выберет текущий элемент, на который щелкнул пользователь, и предоставит идентификатор этого элемента.

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