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を取得してから「finished」を取得するだけです。

非同期と非同期の両方のajax呼び出しを試し、非同期呼び出しを使用すると、同期呼び出しを使用しているときに上記の結果が得られます。アラートが表示され、要素は保存されません。

一度に1つの要素だけが編集されるように調整することもできますが、個々の保存機能を変更するための許可を得るには、週末が終わるまで待つ必要があります。

この特定の問題は修正されていませんが、私はそれを回避します

a)evalの使用を避けるためにから<a href="javascript:function"><img>に変更する。<img onclick="function">

b)ウィンドウのデザインを変更して、一度に1つの要素のみを編集できるようにします。

'for'ループが1回の対話のみを通過した理由はまだわかりませんが、今は調査する時間がありません。後でお尻に噛まれないようにするのが最善の方法です。

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 に答える