У меня есть форма, которая встроена в цикл 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>
Почему вы используете jquery и все еще имеете этот атрибут onclick? А разве не просто привязать событие click?
Чтобы уточнить, похоже, что есть потенциально несколько элементов с id = "usercomment", по одному для каждого из видео. getElementById() даст вам только первый. Вам либо нужно выяснить, как использовать глобально уникальные идентификаторы, как иначе устранить неоднозначность этих элементов, либо выяснить, как работать с результатами чего-то вроде querySelectorAll().
Да, спасибо. вот почему я прошу работоспособное предложение



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте что-нибудь вроде
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) Это ошибка, которую я получил от
попробуйте <button type = "button" id = "submit" onclick = "myComment" class = "btn btn-primary btn-xs pull-right"> Комментарий к сообщению !!!! </button>
вы добавили функцию ajax в функцию?
Ничего себе, с этим есть несколько проблем, особенно с точки зрения программирования. Вы неправильно используете фреймворк, который предоставляет 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>.
Как js-скрипт может понять элемент который с идентификатором, который вам нужен, а?