我正在开发一个窗口,其中包含一系列元素,每个元素都可以单独编辑并同时进行编辑。我使用ajax来引入编辑布局,然后再将ajax更改回如何向客户显示。问题是,当用户点击窗口范围的保存按钮时,我希望每个“打开编辑”元素都被保存。
现在,有些人认为在图像周围使用锚标签而不是onclick函数会很有趣,所以我必须使用eval
来调用函数。
这是我用于窗口范围保存按钮的代码。
var as = document.getElementsByClassName('link_salvare');
alert(as.length);
for(var i = 0; i < as.length; i++) {
alert(i);
eval(as[i].href);
}
alert('finished');
警报只是在那里看到它出错的地方,结果是for结构在第一次迭代后停止(i = 0)。我得到as.length为2(当我有2个“编辑”元素时)然后我只得到i = 0然后'完成'。
我尝试了异步和非异步ajax调用并使用异步调用我在使用同步调用时获得了上述结果我只是获取警报并且没有保存任何元素。
我可以安排,以便一次只编辑一个元素但是必须等到周末之后才能获得更改个别保存功能的许可。
虽然这个特殊问题尚未解决,但我可以通过
解决这个问题 a)从<a href="javascript:function"><img>
更改为<img onclick="function">
以避免使用eval;
b)更改窗口的设计,以便任何时候只能编辑一个元素。
我仍然不知道为什么'for'循环只通过一次交互,但我现在没有时间进行调查,我能做的最好就是希望以后不会咬我的屁股;
答案 0 :(得分:1)
要触摸eval()
....并说明我没有看到任何其他问题..你谈论ajax(XmlHttpRequest)但你没有提供任何错误或与之相关的代码。
HTML
<a href="javascript:foo()" class="foobar">yoyo</a>
<a href="javascript:bar()" class="foobar">yoyo</a>
Javascript
var elements = document.getElementsByClassName('foobar');
function foo() {
alert('foo');
}
function bar() {
alert('bar');
}
[].forEach.call(elements, function(element) {
var func = element.href.split(':')[1],
func_name = func.substring(0, func.lastIndexOf('('));
window[func_name].call();
});
我强烈建议您更改HTML源代码,而不是破解这样的解决方案。 http://jsfiddle.net/rlemon/4vgPn/2/