2012-04-20 22 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