1

我正在开发一个包含一堆元素的窗口,每个元素都可以同时单独编辑。我使用 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) 更改 from<a href="javascript:function"><img><img onclick="function">避免使用 eval;

b) 更改窗口的设计,以便在任何时候都只能编辑一个元素。

我仍然不知道为什么“for”循环只经历了一次交互,但我现在没有时间调查,我能做的最好的就是希望它以后不会咬我的屁股;

4

1 回答 1

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/

于 2012-04-20T14:06:38.217 回答