0

javascript (DOM) で作成している select 要素があります。

var cell_stock_id = row.insertCell(0);
var cell_stock_id_sel = document.createElement('select');

私はこれのためにonchange JavaScript関数を保持しています-

cell_stock_id_sel.setAttribute("onchange","populateOtherFields");

selectで選択したオプションを変更すると、関数が呼び出されます。

この関数「populateOtherFields」に引数を渡す方法はありますか?

テーブル行に選択ボックスと多数のテキスト フィールドがあります。選択に基づいてこれらの行にデータを入力したいと思います。これらのフィールドに挿入する必要があるデータにアクセスできますが、その行のテキスト フィールドにデータを入力する方法がわかりません。行内の要素の名前を識別する一意の番号を渡すことを考えています。JavaScript は、行の要素の名前でそのパターンを解析します。

 document.forms["0"].elements[i].name.indexOf("pattern"). 

したがって、この「パターン」を渡す方法はありますか。これは本質的に反復 (行数、行番号) 番号です。

select__1, text__1, text2__1
select__2, text__2, text2__2

'__1' と '__2' を渡す必要があります。そして、それらは静的なパターンではありません。任意の数である可能性があります。

4

2 に答える 2

4

setAttributeイベント ハンドラーの設定に使用しないでください。直接代入または (より良い) addEventListener/attachEventを使用してから、必要な引数で関数を呼び出す関数を作成できます。(もちろん、とにかくそれを行うこともできますが、を使用setAttributeすると、インラインで行うか、さらに別のグローバルな名前付き関数を作成する必要があります。)

直接割り当て:

cell_stock_id_sel.onchange = function() {
    populateOtherFields(arguments, here);
};

すべてのブラウザーで機能しますが、changeこのメソッドを使用して要素に指定できるハンドラーは 1 つだけです ( と同様setAttribute)。

addEventListener:

cell_stock_id_sel.addEventListener('change', function() {
    populateOtherFields(arguments, here);
}, false);

これは標準ですが、古いバージョンの IE にはありません。

attachEvent:

cell_stock_id_sel.attachEvent('onchange', function() {
    populateOtherFields(arguments, here);
});

これは IE のみです (ほとんどの場合、一部のブラウザーは IE のみのサイトに骨を投げます)。これは、Microsoft の標準化前の方法です。標準モードのIE8以降では、代わりに使用できますaddEventListener

これらすべての方法のもう 1 つの利点は、グローバル関数を使用する必要がないことです。一方、setAttribute関数名を使用する場合、その関数はグローバルである必要があります。ブラウザーのグローバル名前空間はすでに非常に混雑しています


ブラウザーによってさまざまな違いがあるため、jQueryYUIClosure、または他のいくつかのいずれかなど、適切な JavaScript ブラウザー ライブラリを使用することをお勧めします。これらはaddEventListener/のような違いを滑らかにし、多くの便利なユーティリティ機能attachEventも提供します。

于 2012-06-12T10:21:29.820 に答える
1
cell_stock_id_sel.addEventListener("onchange", function() {
    populateOtherField(arguments);
});
于 2012-06-12T10:21:54.773 に答える