Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基本jquery循环问题围绕';单击';_Javascript_Jquery - Fatal编程技术网

Javascript 基本jquery循环问题围绕';单击';

Javascript 基本jquery循环问题围绕';单击';,javascript,jquery,Javascript,Jquery,基本的问题,但我一直在敲我的头,所以我想我会把它带到这里来 html如下所示(编辑,修复结束引号) 删除 删除 删除 删除 删除 javascript/jquery如下所示 iids = ['119','120','121','122','123']; for (i=0; i<iids.length; i++) { place = iids[i]; $(".deleteimage-" + place).click(function () {

基本的问题,但我一直在敲我的头,所以我想我会把它带到这里来

html如下所示(编辑,修复结束引号)

删除
删除
删除
删除
删除
javascript/jquery如下所示

iids = ['119','120','121','122','123'];
for (i=0; i<iids.length; i++) {
        place = iids[i];
        $(".deleteimage-" + place).click(function () {
                alert(place);
             });
    }
iids=['119','120','121','122','123'];

对于(i=0;i您有一个范围问题。当回调启动时,
place
具有循环中的最后一个值

您需要为闭包创建一个新变量;每个迭代一个变量,然后闭包将“捕获”每个变量并在回调中使用

如果解决方案是:

var iids = ['119','120','121','122','123']; // don't forget `var` please
for (var i=0; i<iids.length; i++) {
   var place = iids[i]; // local variable?
   $(".deleteimage-" + place).click(function () {
       alert(place);
   });
}

有更简洁的方法使用闭包和绑定变量来使用这种函数方法,其他答案也很好地涵盖了这些更简洁的方法。我的答案着重于解释这个问题。

问题在于作用域和闭包。 在JS中,作用域是@function-level,而不是block-level

试试这个:

var iids = ['119','120','121','122','123']; 
for (i=0; i<iids.length; i++) {         
    place = iids[i];
    var clickFn = function(a){
        return function(){
         alert(a);
        }
    }(place);
    $(".deleteimage-" + place).click(clickFn );     
} 
var-iids=['119'、'120'、'121'、'122'、'123';

对于(i=0;i这是因为单击是在循环完成后发生的,因此您正在发出警报
place=iids[iids.length-1]
。为了获得您正在寻找的结果,您需要创建一个函数闭包,并将
place
作为参数传入:

iids = ['119', '120', '121', '122', '123'];
for (i = 0; i < iids.length; i++) {
    place = iids[i];
    (function(_place) {
        $(".deleteimage-" + _place).click(function() {
            alert(_place);
        });
    } (place));
}
iids=[119]、[120]、[121]、[122]、[123];
对于(i=0;i
在循环内部,您将
单击事件绑定到那些
span
事件,但是只有在循环完成后才会触发事件。因此,它将始终显示最后一个值。

正如其他人提到的,您有一个范围问题。除非所有这些类都有唯一的含义,否则我会将
位置
值移动到属性,并将类名称保留为
deleteimage
。类似于:

<span class='deleteimage' data-place='119'>delete</span>
<span class='deleteimage' data-place='120'>delete</span>
<span class='deleteimage' data-place='121'>delete</span>
<span class='deleteimage' data-place='122'>delete</span>
<span class='deleteimage' data-place='123'>delete</span>

$(".deleteimage").click(function() {
    var place = $(this).data("place");
    alert(place);
});
删除
删除
删除
删除
删除
$(“.deleteimage”)。单击(函数(){
var place=$(此).data(“place”);
警戒(地点);
});

如果
place
值不是唯一值,则此答案不适用。

您忘记了
span
s中的结束引号。可能重复10%的Stackoverflow JavaScript问题:-)它们应该是双倍的quotes@morgar??我认为,单引号是完全可以的,即使在严格的XHTML中也是如此。@Mickey-你的主要问题已经得到了回答,只有几个一般性问题/要点:1)为什么每个跨度都有一个特定的类?每一款都有特定的款式吗?如果不是,那么我想你可能想做的是把这些作为你的id,而不是类。2) 你真的想一步一步地浏览这个id列表,还是想绑定到页面上每个跨度的点击?如果是后者,则可以省去for循环,为每个跨度指定与“deleteimage”相同的类,然后将它们全部绑定到一行:$('.deleteimage')。单击(function(){alert$(this.attr('id'))})+1使用这种方法,而不是将一个函数放在返回另一个函数的循环中…@Pointy:你不再是方案柜里的人了,我的朋友谢谢Tomalak!我有一种感觉,它在做类似的事情,但只是不知道如何摆脱它。。。因此,我尝试创建该局部变量。哦,谢谢你提醒我添加var:)谢谢,这是一个非常好的解决方案,因为目前我在每个跨度周围都有一个名为“deleteimage”的父div,我也应用了这个样式。多余的,这就是我喜欢你的原因:)
iids = ['119', '120', '121', '122', '123'];
for (i = 0; i < iids.length; i++) {
    place = iids[i];
    (function(_place) {
        $(".deleteimage-" + _place).click(function() {
            alert(_place);
        });
    } (place));
}
<span class='deleteimage' data-place='119'>delete</span>
<span class='deleteimage' data-place='120'>delete</span>
<span class='deleteimage' data-place='121'>delete</span>
<span class='deleteimage' data-place='122'>delete</span>
<span class='deleteimage' data-place='123'>delete</span>

$(".deleteimage").click(function() {
    var place = $(this).data("place");
    alert(place);
});