我准备了一个JsFiddle来解释我的问题,就是这样:http://jsfiddle.net/3tAZ7/1/
所以,基本上我正在尝试将处理程序附加到每个mathjax渲染对象,以便当我单击其中一个时,调用函数“jax_remove”。
问题是无论我点击什么mathjax元素,它都会删除最后一个mathjax元素!
这是我正在使用的功能:
setTimeout(function() { //timeout is necessary for mathjax loading
jaxes = MathJax.Hub.getAllJax("math");
for(var i = 0; i < jaxes.length; i++) {
var jax=jaxes[i];
alert(jax.inputID);
$("#"+jax.inputID+"-Frame").click(function() {
jax_remove(jax);
});
};
},1250);
如果你检查DOM,你可以看到每个渲染的mathjax都包含在一个id为“MathJax-Element-n-Frame”的范围内,其中n = 1,2,3,...所以这些是我附加处理程序的元素,它似乎工作,证据是出现的两个初始警报。
所以问题似乎是在“jax_remove”函数的链接中。
你能帮帮我吗?
答案 0 :(得分:3)
变化:
$("#"+jax.inputID+"-Frame").click(function() {
jax_remove(jax);
});
为:
$("#"+jax.inputID+"-Frame").click( (function(j) {
return function(){
jax_remove(j);
};
})(jax) );
有关解释,请查看@Arun P Johny的链接。
答案 1 :(得分:1)
为降低复杂性,请考虑使用Function.prototype.bind()
。
$("#"+jax.inputID+"-Frame").click(jax_remove.bind(null, jax));