2012-04-20 25 views
1

我正在处理一个窗口,它有一堆可以分别编辑的元素,并且可以同时进行编辑。我使用ajax来重新编辑布局,然后再次将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'); 

警报就在那里,看看它是怎么回事错了,它原来的结构对于第一次迭代(I = 0)之后仅仅停止。我得到as.length为2(当我有2个“编辑”元素),但我只得到i = 0,然后'完成'。

我尝试了异步和非异步ajax调用和使用异步调用我使用同步调用时获得上述结果我刚刚收到警报并且没有保存元素。

我可以安排一次只编辑一个元素,但必须等到周末后才能通过更改个人保存功能。

尽管这个特定的问题仍然没有解决,我解决它由

一)改变从<a href="javascript:function"><img><img onclick="function">,以避免使用eval; b)改变窗口的设计,以便在任何时候只能编辑一个元素。

我仍然不知道为什么'for'循环只能通过一个对象,但我现在没有时间去调查,我能做的最好的是希望它不会在后来咬我;

+2

为什么你“必须使​​用eval()”?你从来没有**有**使用eval() – rlemon 2012-04-20 13:48:28

+0

那我该如何调用函数呢?请记住,它们被分配为尝试所有触发器的方式,并且无法让它们实际运行这些功能。 – Bogdan 2012-04-20 13:50:06

+0

http://jsfiddle.net/rlemon/4vgPn/不完美,但有周围的方法。我建议你改变HTML! :P – rlemon 2012-04-20 13:55:55

回答

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/

+0

我必须问使用eval有什么问题吗?关于XmlHttpRequests:我将不得不等到星期一发布它们,我怀疑它可能是XmlHttpRequest对象的声明或其他东西。我无法弄清楚的是为什么循环只能通过一次迭代。 – Bogdan 2012-04-21 08:07:14

+0

http:// stackoverflow。com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea and http://24ways.org/2005/dont-be-eval想起... – rlemon 2012-04-21 18:45:52

+0

谢谢,我现在会更改html,我已经通过了。我也会这样做,所以我不需要通过在窗口上最多打开一个元素来编辑窗口来循环所有元素。 – Bogdan 2012-04-23 12:57:00