Som*_*ens 4 javascript foreach jquery
我循环遍历一组16个ID并eventListener为每个ID分配一个.我想向我的php文件发送一个数字(第一个id为1,第二个为2,等等),但它似乎i比我想要的更具动态性.每个id发送17.
klasses.forEach(function(klass){
var svgElement = svgDoc.getElementById(klass); //get the inner element by id
svgElement.addEventListener("mouseup",function(){
$.ajax({
type: "POST",
url: "buildService.php",
data: { "service" : i}
}).done(function(msg){
alert(lameArray[i]);
$("#modalSpan").html(msg);
$("#modmodal").modal();
});
});
i++;
});
Run Code Online (Sandbox Code Playgroud)
如何将每个设置为特定数字?我也尝试过:
var lameArray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
...
data: { "service" : lameArray[i]}
Run Code Online (Sandbox Code Playgroud)
Max*_*Art 10
什么i?问题是,i是一个全局变量,或外部变量forEach循环无论如何,所以当mouseup触发事件,价值i在该使用istant,而不是一个被定义的事件监听器,当它了.
请注意,因为您正在使用forEach,回调函数实际上是使用第二个参数调用的,该参数是计数器.所以你可以使用:
klasses.forEach(function(klass, i) {
...
});
Run Code Online (Sandbox Code Playgroud)
现在,i是forEach范围内的变量,并满足您的目的.(forEach在第三个参数中调用回调函数,也就是集合本身 - klasses在你的情况下.)
注意:由于您使用的是jQuery,因此您应该使用更"类似jQuery"的样式进行编码.所以改变你的代码是这样的:
$.each(klasses, function(i, klass) {
$("#" + klass).mouseup(function(){
$.ajax({
type: "POST",
url: "buildService.php",
data: {service: i + 1}
...
});
});
});
Run Code Online (Sandbox Code Playgroud)