无法将数组值传递给单击函数
can not pass array value to a click function
我计划在页面上显示一些图像,当用户按下向上按钮时,将显示一些相关的新图像。我已经通过改变"src"属性已经存在的图像html标签实现了这一点。
我有json数据,如[["a","b"],["c","d"]]
,它给出了图像的名称,如a.jpg, b.j jpeg等。
这里是问题我不能传递数组值jquery点击对象。我的javascript函数如下:
var a; // a global variable holding the json array [["a","b"],["c","d"]]
function rileri(){ //img next
var ix=parseInt($("#up").attr('rel'));
ix=(ix+1)%a.length;
for(var i=0;i<2;i+=1){
$("#k"+i).attr("src","img/m/t/"+a[ix][i]+".jpg");
$("#k"+i).click(function() { rgetir(a[ix][i]);}); //problem is here!!
}
$("#up").attr('rel',ix); // i keep index data of appearing img on "rel"
}
function rgetir(n){ //img down ajax
$("#brc").load("data/rgetir.php", {'name':n});
}
我想知道我如何绑定点击事件,如果有更好的解决方案?
html是这样的(开头没有"src",可以吗?):
<img id="k0"/><img id="k1"/>
<input id="up" rel="0" type="button" onclick="rileri()" value="Next">
是的,主要问题是将多维数组值传递给函数:(
这个问题与"多维数组"无关。这是因为你在分配的点击值中使用i
,并且i
随着循环的每次迭代而变化。每个分配的点击值都包含对i
的引用,因此当rileri
完成时,每个点击值都指向相同的值。你需要打破引用,通常通过将i
传递给一个函数并在那里绑定click来完成。
使用函数打破引用有很多种方式,但由于您使用的是jQuery并迭代数组,我们将使用$.each
:
(以下内容未经测试,但应作为示例)
function rileri(){
var ix=parseInt($("#up").attr('rel'),10);
ix=(ix+1)%a.length;
$.each(a[ix], function (i) {
var img_name = this;
$("#k"+i)
.attr("src","img/m/t/"+img_name+".jpg")
.click(function () {
rgetir(img_name);
});
if (i >= 2)
{
return false;
}
});
$("#up").attr('rel',ix);
}
这是一个简单的小提琴,显示了您的问题
http://jsfiddle.net/MHJx6/问题是你的ix和i变量是闭包,所以在事件运行的时候,它们有错误的值,正如你在这个例子中看到的。
我试着写一些代码来做我认为你想做的事情。如果我知道您要做什么(用例),那就容易多了。也许这就是你想要的?
var a; // a global variable holding the json array [["a","b"],["c","d"]]
function rileri(){ //img next
$("#k0").click(function() { handleClick(0); });
$("#k1").click(function() { handleClick(1); });
}
function handleClick(index) {
var ix=parseInt($("#up").attr('rel'));
ix=(ix+1)%a.length;
$("#k"+index).attr("src","img/m/t/"+a[ix][index]+".jpg");
$("#up").attr('rel',ix);
}
相关文章:
- 使用单击函数中的jQuery切换元素
- 单击函数仅对某些数据名称执行
- 如何创建背景图像列表'URL,并使用jQuery在单击函数时应用它们
- 调用时未输入角度 ng 单击函数
- 未捕获的引用错误:变量未在单击函数上定义
- 在 JavaScript 中单击函数时两个日期类型输入之间的差异的代码
- 通过动态创建数组名称在单击函数中引用 javascript 数组
- 单击函数生成的 jQuery 对话框中的元素
- this.offset不是单击函数中的函数
- jQuery:将tr附加到表tbody可以防止tr单击函数
- 将列表值传递给jQuery单击函数
- .nextAll函数在单击函数内部使用时将不起作用
- Javascript单击函数返回
- 在jQuery单击函数上渲染部分Rails
- jquery使用单击函数增加PHP变量
- 未从指令模板调用的单击函数
- 在另一个函数中触发单击函数
- Jquery 单击函数不适用于动态元素
- 单击函数以在组扩展后运行
- 列表中项的动态单击函数指令.快到了