Getelementbyid работает только с первым идентификатором в цикле php while

У меня есть форма, которая встроена в цикл php while, и она обрабатывалась javascript через getelementbyid, всякий раз, когда я отправляю, она отправляет только первый элемент формы в цикле. ниже мой php

$qsel = "SELECT * FROM sellbusiness ORDER BY sn DESC LIMIT 2";
$results = mysqli_query($conn,$qsel) or die(mysqli_error());  
$num_rows = mysqli_num_rows($results);
              while($rows=mysqli_fetch_array($results)){
                $status = $rows['status'];
                $usern = $rows['username'];
                $video = $rows['video'];
            ?>

<input type = "text" id = "usercomment" value = " " name = "comment"  placeholder = "Enter your comment" class = "form-control" />
<input type = "hidden" name = "postcode" id = "postcode" value = "<?php echo $postcodez; ?>"  class = "form-control" />
<input type = "hidden" name = "username" id = "username" value = "<?php echo $usern; ?>"  class = "form-control" />
<input type = "hidden" name = "commentor" id = "commentor" value = "<?php echo $username; ?>"  class = "form-control" />
<span class = "input-group-btn">
<button type = "button" id = "submit" onclick = "myComment()" class = "btn btn-primary btn-xs pull-right " >Post Comment!!!!</button>

<?php } ?>

и ниже мой ajax

<script type = "text/javascript">

function myComment() {
var usercomment= document.getElementById("usercomment").value;
var commentor= document.getElementById("commentor").value;
var postcode = document.getElementById("postcode").value;
var username = document.getElementById("username").value;
// Returns successful data submission message when the entered information is stored in database.
var dataString = 'usercomment1=' + usercomment + '&commentor1=' + commentor + '&postcode1=' + postcode + '&username1=' + username ;

// AJAX code to submit form.
$.ajax({
type: "POST",
url: "commenthandler.php",
data: dataString,
cache: false,
success: function(html) {
alert(html);
}
});

return false;
}
</script>

Как js-скрипт может понять элемент который с идентификатором, который вам нужен, а?

u_mulder 28.03.2018 22:05

Почему вы используете jquery и все еще имеете этот атрибут onclick? А разве не просто привязать событие click?

u_mulder 28.03.2018 22:07

Чтобы уточнить, похоже, что есть потенциально несколько элементов с id = "usercomment", по одному для каждого из видео. getElementById() даст вам только первый. Вам либо нужно выяснить, как использовать глобально уникальные идентификаторы, как иначе устранить неоднозначность этих элементов, либо выяснить, как работать с результатами чего-то вроде querySelectorAll().

JonSG 28.03.2018 22:31

Да, спасибо. вот почему я прошу работоспособное предложение

Ademaintain 28.03.2018 22:49
Поведение ключевого слова "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) для оценки ваших знаний,...
1
4
530
2

Ответы 2

Попробуйте что-нибудь вроде

function myComment(e) {
var elementparent=e.target.parentElement;
var usercomment= elementparent.getElementById("usercomment").value;
var commentor= elementparent.getElementById("commentor").value;
var postcode = elementparent.getElementById("postcode").value;
var username = elementparent.getElementById("username").value;
var dataString = 'usercomment1=' + usercomment + '&commentor1=' + commentor + '&postcode1=' + postcode + '&username1=' + username ;

// AJAX code to submit form.
$.ajax({
type: "POST",
url: "commenthandler.php",
data: dataString,
cache: false,
success: function(html) {
alert(html);
}
});

return false;
    }

Uncaught TypeError: невозможно прочитать свойство target of undefined в myComment (home: 2584) в HTMLButtonElement.onclick (home: 1101) Это ошибка, которую я получил от

Ademaintain 28.03.2018 23:08

попробуйте <button type = "button" id = "submit" onclick = "myComment" class = "btn btn-primary btn-xs pull-right"> Комментарий к сообщению !!!! </button>

Tommy Dong 28.03.2018 23:44

вы добавили функцию ajax в функцию?

Tommy Dong 29.03.2018 02:13

Ничего себе, с этим есть несколько проблем, особенно с точки зрения программирования. Вы неправильно используете фреймворк, который предоставляет jQuery, это как если бы вы заимствовали его функциональность AJAX, но вы настаиваете на использовании сложного традиционного JavaScript для всего остального. Одна из вещей, в которой лучше всего подходит jQuery, - это выбор элементов. Вместо того, чтобы объединять значения полей ввода, используя (неправильно) getElementById(), используйте функцию jQuery .serialize() для кодирования всех данных в вашей форме. Если вы это сделаете, вам не нужно добавлять ненужные id в поля ввода.

Я постараюсь помочь, чтобы у вас было что-то, что работает.

$(document).ready(function() {
    $("#submit").click(function() {
        // AJAX code to submit form.
        $.ajax({
            type: "POST",
            url: "commenthandler.php",
            data: $("form").serialize(),
            cache: false,
            success: function(html) {
                alert(html);
            }
        });
    });
});

Вы можете удалить атрибут onclick из вашего <button>, поскольку jQuery может привязать функцию к нажатию кнопки. Вы можете продолжать использовать $_POST['usercomment'], $_POST['postcode'] и т. д. Изнутри вашего PHP. Но важно понимать, что даже если вы умеете хорошо использовать jQuery, getElementById() не возвращает ни одного элемента, он возвращает множество элементов. Вот почему это не работает:

var usercomment= document.getElementById("usercomment").value;
var commentor= document.getElementById("commentor").value;

Вы не указываете элемент который с идентификатором usercomment для получения значения. Если бы вы использовали getElementById() для чего-то, вам нужно было бы указать, какой элемент массива использовать, как это.

var usercomment = document.getElementById("usercomment")[0].value;
var commentor = document.getElementById("commentor")[0].value;

В вашем образце также отсутствует закрывающий тег <span>.

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