1
function LoadFoo(selected_foo) {
var foobar = selected_foo.bar;
var head = document.getElementsByTagName('head')[0];
var nextfoo = document.createElement('script');
nextfoo.type= 'text/javascript';
nextfoo.src="foobaz.php?form=foo" + ... + "&foobar=" + foobar; // a php script which reads from MYSQL and generates script that updates selectboxes of the document
head.appendChild(nextfoo) }

Chromeバージョン23.0.1271.26、FF 16、IE 9でテストされており、これまでのところ問題はありません。しかし、私はこれまでJSに取り組んだことがなく、IE6〜8でテストされていないので、少し心配しています。また、nextfoo実行するたびにより多くのオブジェクトが作成されるので、問題はありませんか?appingを試してみましたが、IE9で動作しなくhead.removeChild(nextfoo);なったため、削除しました。nextfoo

4

1 に答える 1

0

現在のコードは新しいスクリプトタグを作成しますが、理想的とは言えませんが、実際には問題は発生しません(ページに数百のスクリプトタグが追加されている場合を除きます。xmlhttpなどを使用するように変更するとよいでしょう。コメントを読んでください。あなたはちょっとあなたが持っているものに固執しましたか?

.src属性に問題がある場合は、setAttributeを使用して設定してみてください。

function LoadFoo(selected_foo) {
var foobar = selected_foo.bar;
var head = document.getElementsByTagName('head')[0];
var nextfoo = document.createElement('script');
nextfoo.setAttribute("type", "text/javascript");
nextfoo.setAttribute("src", "foobaz.php?form=foo" + ... + "&foobar=" + foobar);
head.appendChild(nextfoo) }

removeChild()ビットをどこに使用するかわかりません。ロードしたばかりのビットを、完了後に削除しようとすると、この関数に追加できません。(ロードされる前に要素を削除する可能性があります)

古いfooを削除することはできますが(IDなどを追加して各スクリプトタグを区別することにより)、それらを大量にロードすると、ロードされていないものを削除するという同じ問題に直面する可能性があります。

于 2012-10-25T20:00:18.603 に答える