Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.05.2021, 09:45
Интересующийся
Отправить личное сообщение для Reken Посмотреть профиль Найти все сообщения от Reken
 
Регистрация: 05.05.2021
Сообщений: 16

Передача значений AJAX
Подскажите пожалуйста. Я через цикл вывожу таблицу из БД построчно при помощи массива. Следующий код у меня дублируется 100 раз, так как в таблице из БД 100 строк:
<td><input type='text' value=$row[ZN1] id='ZN1' name='ZN1'></td>
<td><input type=button id='btn' value='Изменить'></td>

Далее скрипт ajax который отправляет значения в обработчик:
$(document).on('click', '#btn', function(){

           var ZN1 = $('#ZN1').val();
          
$.ajax({  
                url:"update.php",  
                method:"POST",  
                data:{ZN1:ZN1},
                dataType:"text",  
                success:function(data)  
                {  
                     alert(data);  
                     fetch_data();  
                }  
           })

Так как у меня используется цикл, то все мои 100 значений AJAX видит под одним ID. В следствии чего, в обработчик уходят данные только из первой строчки таблицы, даже если кнопка "Изменить" была нажата в 7-ой строке таблицы.
Подскажите, как изменить код что бы, значения уходили в обработчик, согласно строке, в которой была нажата кнопка изменить...
Ответить с цитированием
  #2 (permalink)  
Старый 05.05.2021, 10:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Reken,
выкинуть id, заменить на class.
и тогда
$(document).on('click', '.btn', function(){
           var tr = this.closest('tr');
           var ZN1 = $('.ZN1', tr).val();
Ответить с цитированием
  #3 (permalink)  
Старый 05.05.2021, 10:24
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,714

id - должен быть уникальным. Нельзя давать нескольким элементам одинаковый id. Отсюда и возникают такие проблемы.

Либо назначайте элементам разные id, либо используйте делегирование - обработчик click вешайте на таблицу, затем через target берете элемент на котором нажали, если это кнопка, определяете родительскую строку, и берете input из этой строки

<table>
...
<tr>
<td><input type='text' value=$row[ZN1] name='ZN1'></td>
<td><input type=button value='Изменить'></td>
</tr>
...
</table>

document.querySelector('table').addEventListener('click', (ev) =>{
   const et = ev.target;
   if (el.type === 'button') {
      const rw = el.closest('tr');
      const inp = rw.querySelector ('[type="text"]') // элемент input type=text
     const val = inp.value
    // далее ajax с этим значением
      
   }
})
Ответить с цитированием
  #4 (permalink)  
Старый 05.05.2021, 10:56
Интересующийся
Отправить личное сообщение для Reken Посмотреть профиль Найти все сообщения от Reken
 
Регистрация: 05.05.2021
Сообщений: 16

А как можно используя php цикл while, в каждую строчку назначить персональный ID? И далее в Ajax получить этот ID?

while($row = mysqli_fetch_array($result)) {
echo <<<HTML
<form>
<tr>
<td><input type='text' value=$row[ZN1] id='ZN1' name='ZN1'></td>
<td><input type=button id='btn' value='Изменить'></td>
</tr>
</form>
HTML;

}

Как в коде выше можно присвоить персональный ID каждому значению? Если эта строка будет дублироваться, пока не выведет весь массив...
Ответить с цитированием
  #5 (permalink)  
Старый 05.05.2021, 14:22
Интересующийся
Отправить личное сообщение для Reken Посмотреть профиль Найти все сообщения от Reken
 
Регистрация: 05.05.2021
Сообщений: 16

Всё, получилось. Заменил ID на class и всё завелось... Всем спасибо
Ответить с цитированием
  #6 (permalink)  
Старый 11.05.2021, 12:02
Интересующийся
Отправить личное сообщение для Reken Посмотреть профиль Найти все сообщения от Reken
 
Регистрация: 05.05.2021
Сообщений: 16

А можете пожалуйста ещё подсказать? Теперь хочу понять, как можно кнопку button заменить, на нажатие клавиши enter...То есть ввести цифру в ячейку, и нажать клавишу enter для передачи информации в обработчик.
Я так понимаю, это нужно отслеживать нажатие клавиши enter в текстовом поле...Наверное как то через
$(document).ready(function(){
                $('input').keydown(function(e) {
                       if(e.keyCode === 13) {

Но не могу понять как именно, это прикрутить к моему коду. Сможете подсказать?
Ответить с цитированием
  #7 (permalink)  
Старый 11.05.2021, 15:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Reken,
$(function() {// это вместо ready
    $('input.ZN1').keydown(function(e) {
        if (e.keyCode === 13) {
            var ZN1 = this.value;
            $.ajax({
                url: "update.php",
                method: "POST",
                data: { ZN1 },
                dataType: "text",
                success: function(data) {
                    alert(data);
                    fetch_data();
                }
            })
        }
    })
});
Ответить с цитированием
  #8 (permalink)  
Старый 12.05.2021, 08:48
Интересующийся
Отправить личное сообщение для Reken Посмотреть профиль Найти все сообщения от Reken
 
Регистрация: 05.05.2021
Сообщений: 16

Спасибо, работает. Но после того как я немного усложнил код, перестало работать...Можете пожалуйста подсказать, где я допустил ошибку...
<script>  
$(document).ready(function(){  

      function fetch_data()  
      {  
           $.ajax({  
                url:"select.php",  
                method:"POST",  
                success:function(data){  
                     $('#live_data').html(data);  
                }  
           });  
      } 
      fetch_data();  

	    $('input').keydown(function(e) {
	        if (e.keyCode === 13) {



                 var tr = this.closest('tr');
           var ID = $('.ID', tr).val();    
           
           var tr = this.closest('tr');
           var ZN2 = $('.ZN2', tr).val();
           
           var tr = this.closest('tr');
           var ZN1 = $('.ZN1', tr).val();


                     
$.ajax({  
                url:"update.php",  
                method:"POST",  
                data:{ID:ID, ZN1:ZN1, ZN2:ZN2},
                dataType:"text",  
                success:function(data)  
                {  
                      
                     fetch_data();  
                }  


           })  
}

      });  

 });  

 </script>
Ответить с цитированием
  #9 (permalink)  
Старый 12.05.2021, 09:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Reken,
смотрите ошибки в консоли
Ответить с цитированием
  #10 (permalink)  
Старый 12.05.2021, 10:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Reken,
могу только погадать, что нет инпутов на момент работы скрипта, и строку 16 надо перенести в строку 11.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача файла через Drop and Drag по ajax finlolo AJAX и COMET 1 20.02.2019 21:47
передача значений из php цикла в ajax обрабочик scheford AJAX и COMET 0 08.02.2016 19:21
Передача через AJAX большого объема данных yambbkru AJAX и COMET 3 20.06.2015 15:18
AJAX, Только передача данных. NewJSUser AJAX и COMET 14 12.01.2015 17:38
Как в обработчик php через Ajax передать несколько значений? Urukhay Общие вопросы Javascript 2 30.08.2014 16:19