我有一个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.log(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.");
}
});
};
但是当我检查控制台日志时,我看到id和userstatus是未定义的,而不是应该传递的id和class属性。有什么帮助吗?我知道该函数已正确调用,因为我收到了成功警报。
答案 0 :(得分:1)
改为使用此:
$('#id').on('click', function(){
//Do something
//console.log(this)
})
当然,您需要为元素传递一个固定的ID,或者可以使用$('。class')并向其传递一个类!
答案 1 :(得分:1)
要解决未定义的问题,请删除古老的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 ...
});
});
这会将click事件处理程序附加到该类(如果是“ clicker”),因此适用于该类的所有按钮。
答案 2 :(得分:0)
因为内部函数this
中的hello
指向window
对象。您可以将event
参数传递给hello
之类的onclick="hello(event)"
函数,并且在此函数内部,您可以使用event.target.getAttribute('id')
来访问此元素的ID,别忘了更改函数定义function hello(){...}
至function hello(event){...}