我的Laravel刀片引擎中有这个For-each循环,我正在尝试使用按钮单击事件将ID和名称传递给我的Javascript函数,并将其记录到控制台,
逻辑:以附加图片为例 (1.)单击添加按钮后,A点的学生将转到B点 (2.)一旦删除按钮单击A点的学生,就会从B点移除并返回A点 SimpleDateFormat patterns documentation
现在,到目前为止,我一直在尝试使用console.log将学生的姓名和ID记录到控制台,但问题是只有第一个学生的ID会出来。例如,如果我单击学生3 = id为1,则没有获得学生的真实ID。我该如何处理?实现我的目标的最佳建议是什么?
代码
@foreach($students as $std)
<input id="myInput" type="button" value="{{$std->name}}" onclick="addRow()">
@endforeach
function addRow() {
var inputVal = document.getElementById("myInput").value;
console.log(inputVal);
}
答案 0 :(得分:1)
将数据属性添加到您的输入字段,并在onclick()上获取它们。这是data attribute documentation。
使用Jquery的代码
@foreach($students as $std)
<input id="myInput" type="button" data-name="{{$std->name}}" data-id="{{$std->id}}" value="{{$std->name}}" onclick="addRow(this)">
@endforeach
function addRow(ele)
{
var name= $(ele).attr('data-name');
var id= $(ele).attr('data-id');
console.log(name);
console.log(id);
}
答案 1 :(得分:0)
第一个从循环ID中删除的ID必须是唯一的
第二个可以作为函数参数传递
@foreach($students as $std)
<input type="button" value="{{$std->name}}" onclick="addRow({{$std->name}})">
@endforeach
function addRow(inputVal) {
console.log(inputVal);
}
更多解决方案,但需要 jQuery
@foreach($students as $std)
<input type="button" value="{{$std->name}}" onclick="addRow(this)">
@endforeach
function addRow() {
var inputVal = $(this).value;
console.log(inputVal);
}
答案 2 :(得分:0)
标记中的重复ID是问题。如果根本不需要Id,则删除attr Id并在函数addRow中。
使用功能addEventListener
以下方法使用属性名称选择输入,然后绑定单击事件。
如您所见,在处理程序内部,我们可以按以下方式访问输入的值:var inputVal = this.value;
Array.from(document.querySelectorAll("[name='myInput']")).forEach(i => {
i.addEventListener("click", function(e) {
var inputVal = this.value;
console.log(inputVal);
});
});
<input name="myInput" type="button" value="{{$std->name1}}">
<input name="myInput" type="button" value="{{$std->name2}}">
<input name="myInput" type="button" value="{{$std->name3}}">
处理程序中
this
的值是对该元素的引用。
答案 3 :(得分:0)
每个元素只能有一个ID,但实际上可以有更多 多于一个班级。
您的问题是您为所有按钮使用了相同的ID。接下来,您是否要在addRow函数中调用dom元素,而Js无法清楚地找到您想获取的dom value
是什么。为了解决这个问题,您的代码应如下所示。
纯JS
@foreach($students as $std)
<input class="myInput" type="button" value="{{$std->name}}" onclick="addRow({{$std->name}})">
@endforeach
function addRow(inputVal) {
console.log(id);
}
JQUERY
// html
@foreach($students as $std)
<input class="myInput" type="button" value="{{$std->name}}">
@endforeach
// your script
$('.myInput').click(function() {
console.log(this.val())
});