PHP OnClick Возврат undefined

У меня есть цикл 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.");
      }   
    });
};

но когда я проверяю журнал консоли, я вижу, что идентификатор и статус пользователя не определены, а не то, что должно быть переданными атрибутами идентификатора и класса. Любая помощь? Я знаю, что функция вызывается правильно, потому что я получаю предупреждение об успешном выполнении.

попробуйте взять переменную в функции arg, например function hello(event), и заменить this на событие

delboy1978uk 05.07.2018 16:36

Ответ HTTP может быть 2xx, но это не означает, что сценарий PHP делает то, что вы ожидаете. Не могли бы вы и этим поделиться?

Cameron Hurd 05.07.2018 16:36

Я бы предложил удалить древний метод onclick и использовать соответствующий обработчик событий jquery .click, и тогда использование $(this) будет работать правильно.

IncredibleHat 05.07.2018 16:37
Поведение ключевого слова "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
3
396
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Используйте вместо этого:

$('#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 строк, которые будут иметь одинаковый идентификатор, и я могу заставить работать только первую строку.

Nrrrdfather 05.07.2018 17:09

Я попробую ваши предложения и дам вам знать, как это работает.

Nrrrdfather 05.07.2018 17:10

Вот почему вы используете class для перехвата событий, а не id. И когда кнопка нажата, $(this) относится только к той кнопке, которая была нажата, чтобы запустить это событие :)

IncredibleHat 05.07.2018 17:20

потому что this внутри функции hello указывает на объект window. вы можете передать параметр event функции hello, такой как onclick = "hello(event)", и внутри этой функции вы можете использовать event.target.getAttribute('id') для доступа к идентификатору этого элемента, не забудьте изменить определение функции function hello(){...} на function hello(event){...}

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