У меня есть цикл while для создания таблицы данных и onclick. Я хочу вызвать функцию, но когда функция вызывается, она не получает информацию из переданного onclick.
HTML:
echo "<td width='25%' align='center'><a href='javascript:void(0)' id='{$row['id']}' class='{$row['status']}' onclick='hello()'> {$row['status']} </a></td>";
JS:
//onclick function
function hello()
{
// Get the ID of the button that was clicked on
var id_of_status_to_update = $(this).attr("id");
var status_to_be_updated = $(this).attr("class");
var varData = 'id=' + id_of_status_to_update + '&UserStatus=' +
status_to_be_updated;
console.info(varData);
// Make an AJAX request
$.ajax({
url: "php/processor.php", //This is the page where you will handle your SQL insert
type: "POST",
data: varData, //The data your sending to processor.php
async: false,
success: function(){
// location.reload();
alert("Hello Function");
},
error: function(){
alert("There was a problem, please try again or contact the admin for assistance.");
}
});
};
но когда я проверяю журнал консоли, я вижу, что идентификатор и статус пользователя не определены, а не то, что должно быть переданными атрибутами идентификатора и класса. Любая помощь? Я знаю, что функция вызывается правильно, потому что я получаю предупреждение об успешном выполнении.
Ответ HTTP может быть 2xx, но это не означает, что сценарий PHP делает то, что вы ожидаете. Не могли бы вы и этим поделиться?
Я бы предложил удалить древний метод onclick и использовать соответствующий обработчик событий jquery .click, и тогда использование $(this) будет работать правильно.



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


Используйте вместо этого:
$('#id').on('click', function(){
//Do something
//console.info(this)
})
Конечно, вам нужно будет передать элементу фиксированный идентификатор, в качестве альтернативы вы можете использовать $ ('. Class') и вместо этого передать ему класс!
Чтобы исправить неопределенную проблему, удалите старый метод onclick и используйте соответствующий обработчик событий jquery .click, и тогда использование $(this) будет работать правильно.
Сначала настройте свою html-сборку на это:
echo "<td width='25%' align='center'><a href='#' id='{$row['id']}' class='clicker {$row['status']}'> {$row['status']} </a></td>";
Затем немного измените javascript на это:
$(document).ready(function() {
$(".clicker").click(function(e){
e.preventDefault(); // new line to stop the anchor click default behavior
var id_of_status_to_update = $(this).attr("id");
var status_to_be_updated = $(this).attr("class");
// ... the rest you had is fine as is ...
});
});
Это присоединяет обработчик события щелчка к классу «clicker», поэтому он применяется ко всем кнопкам с этим классом.
Первоначально у меня было так, но тогда мне нужен уникальный идентификатор, потому что есть около 70 строк, которые будут иметь одинаковый идентификатор, и я могу заставить работать только первую строку.
Я попробую ваши предложения и дам вам знать, как это работает.
Вот почему вы используете class для перехвата событий, а не id. И когда кнопка нажата, $(this) относится только к той кнопке, которая была нажата, чтобы запустить это событие :)
потому что this внутри функции hello указывает на объект window. вы можете передать параметр event функции hello, такой как onclick = "hello(event)", и внутри этой функции вы можете использовать event.target.getAttribute('id') для доступа к идентификатору этого элемента, не забудьте изменить определение функции function hello(){...} на function hello(event){...}
попробуйте взять переменную в функции arg, например
function hello(event), и заменить this на событие