在传递一些变量arguments时,如何正确使用onclick()方法,即本例中的arguments是Mongoose对



因此,我将根据从我编写的node.js API获得的数组,动态地将行附加到前端的表中。数组表示学生。对于每一行,我附加并显示NameClassRoll_No以及一个动态按钮,该按钮的颜色根据我从该特定学生获得的值而变化。现在,对于该按钮,我使用以下标签:

$('#users').append("<tr><td>" + (i + 1) + "</td><td>" + val.first_name + " " + val.last_name + "</td><td>" + val.roll_no + "</td><td>" + val.class + "</td><td><button id='tempButton' class='btn btn-danger' onclick='add_remove_student(" + val._id + ", " + val.is_linked + ")'>DELETE</button></td></tr>");

val表示学生数组的当前元素,它是一个猫鼬对象。现在,每当我单击附加的按钮并且没有调用add_remove_student()方法时,我都会收到一个错误。错误显示:

未捕获的SyntaxError:无效或意外的令牌

val._id是特定Mongoose对象的Mongoose ID,val.is_linked是布尔值。

在我切换到node.js 之前,按钮标签中的onclick()工作正常

对于我做错了什么,我已经挠头好几次了。如有任何帮助,我们将不胜感激!

简短的回答是:不要使用onclick或任何其他onX内联事件属性。它们已经过时,导致了意大利面条式的代码,并且没有遵循关注点分离原则。

实现这一点的更好方法是将相关元数据作为data属性添加到元素中。然后,使用单个委托的事件处理程序,您可以从单击的元素中读取元数据。试试这个:

let i = 0;
let val = {
_id: "5e4780d3cfbe57182499506a",
role: ["STUDENT"],
is_active: true,
linked_students: [],
first_name: "test_fname",
last_name: "test_lname",
email: "t1@t.com",
roll_no: "537",
class: 7,
description: "im a test user mate!",
created_at: "2020-02-15T05:25:39.077Z",
updatedAt: "2020-02-15T05:25:39.077Z",
v: 0,
is_linked: true
}
$('button').on('click', function() {
$('#users').append(`<tr><td>${(++i)}</td><td>${val.first_name} ${val.last_name}</td><td>${val.roll_no}</td><td>${val.class}</td><td><button class="delete btn btn-danger" data-id="${val._id}" data-linked="${val.is_linked}">DELETE</button></td></tr>`);
});
$('#users').on('click', '.delete', function() {
let $btn = $(this);
let id = $btn.data('id');
let isLinked = $btn.data('linked');
console.log(id, isLinked);
// do something with the above data...
$(this).closest('tr').remove();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button>Append</button>
<table id="users"></table>

附带说明一下,不要在将动态重复的内容中使用id属性。CCD_ 10需要在DOM中是唯一的。请改用class属性。

无论出于何种原因,如果您绝对必须使用内联事件属性,则需要修复引号,使其匹配,并且还需要转义onclick值中使用的引号,使它们不会干扰外部字符串:

$('#users').append('<tr><td>' + (i + 1) + '</td><td>' + val.first_name + ' ' + val.last_name + '</td><td>' + val.roll_no + '</td><td>' + val.class + '</td><td><button id="tempButton" class="btn btn-danger" onclick="add_remove_student("' + val._id + '", "' + val.is_linked + '")">DELETE</button></td></tr>');

好吧,为了解决这个问题,我花了24小时的时间绞尽脑汁,在了解了转义引号字符的工作原理后,我终于用以下代码解决了这个问题:

$('#users').append(`<tr><td>` + (i + 1) + `</td><td>` + val.first_name + ` ` + val.last_name + `</td><td>` + val.roll_no + `</td><td>` + val.class + `</td><td><button id="tempButton" class="btn btn-danger" onclick='add_remove_student("` + val._id + `","` + val.is_linked + `")'>DELETE</button></td><tr>`);

谢谢^^

这是混合引号的问题,请重新验证jquery中调用函数的引号。另外,请将元素的id设置为动态。

相关内容