1

これはおそらく非常に単純な質問ですが、私はこれを正しく理解できないようです。

FORMから変数「名前」を抽出することは可能ですか? 次のプルダウン メニューがあります (簡略化)...

<FORM NAME="doc_select">
    <SELECT ID="rec_list"  NAME="rec_info"><OPTION>...</OPTION></SELECT>
    <SELECT ID="term_list" NAME="term_info"><OPTION>...</OPTION></SELECT>
    <SELECT ID="comp_list" NAME="comp_info"><OPTION>...</OPTION></SELECT>
</FORM>

これらはすべて、「onChange」ステートメントを介して少しの Java スクリプトをトリガーします。ここまでは順調ですね。

値ではなく名前を抽出し、その抽出された名前を次のような java-script ステートメントで使用します。

var info = form.*name*.value; 

getElementsByName名前ではなく値を教えてくれます。

何か案は?

乾杯フランク

4

4 に答える 4

1

多分このコードはあなたを助けるでしょう。こちらのデモをご覧ください。

form = document.doc_select;

document.getElementById('rec_list').onchange = function() {
    n = this.name;

    var info = form.elements[n].value;
    console.log('name: ' + n);          //name: rec_info
    console.log('info: ' + info);       //info: 2
};​

を使用して要素の名前を取得し.nameます。このelements[]関数は、名前またはインデックスに基づいて要素を返します。たとえばelements[0]、同じ結果が得られますが、インデックスがわからないため、役に立ちません。


アップデート

1 つのスクリプトのみを管理するというコメントを読んだ後、私はあなたの質問を理解したと思います。コードにわずかな微調整を加えるだけで、これはあなたが探しているものになるはずです:

form = document.doc_select;

document.getElementById('rec_list').onchange = function() {
    onChangeFunction(this.name);
};
document.getElementById('term_list').onchange = function() {
    onChangeFunction(this.name);
};
document.getElementById('comp_list').onchange = function() {
    onChangeFunction(this.name);
};

function onChangeFunction(name){
    //...your code goes here...

    var info = form.elements[name].value;
    console.log('name: ' + name);         //outputs name of element that changed
    console.log('info: ' + info);         //outputs value for that element

    //...more of your code...
}

<select>要素ごとに 3 つの異なる関数を使用する必要はなくなりました。:)ここでチェックしてください。 </p>

于 2012-09-28T01:16:45.263 に答える
0

これを試してください...`varrec_list = document.querySelector("#rec_list ");

alert(rec_list.name); `

于 2012-09-28T00:35:07.517 に答える
0

getElementsByName を使用すると、その name 属性を持つ HTMLElement を要求するだけです。必要なのは、HTMLElement から属性「name」を取得することです。jQuery を使用できる場合は、jQuery .attr() 関数を使用できます。

編集: この StackOverflow の質問Get elements by attribute when querySelectorAll is not available without using libraries? をチェックしてください。

于 2012-09-28T00:30:39.360 に答える
0

あなたの問題が何であるかは私には明らかではないので、ここにいくつかの一般的なものがあります. リスナーを呼び出した要素の名前を取得するには、次を渡しthisます。

<select id="rec_list"  name="rec_info" onchange="someFn(this)" ... >

動的に追加されたリスナーでもほぼ同じことができます。関数内:

function someFn(element) {
  var elementName = element.name;
  var theForm = element.form;
  var theValue = element.value;

  // and so on ...

}

名前を使用してフォームのプロパティとしてフォーム コントロールにアクセスすることもできます。

form.comp_info

OP の 3 番目の select 要素です。この特定のケースでは、その名前のコントロールが 1 つある場合、要素への参照が返されることに注意してください。同じ名前のコントロールが複数ある場合は、コレクションが返されます。また、IE は名前トークンと ID トークンを混同するため、あるコントロールの名前と別の ID に同じ値を使用しないでください。

メソッドはコレクションを返します。getElementsByNameメンバーはインデックスでアクセスできるため、最初のメンバーは次のようになります。

var someElement = document.getElementsByName('foo')[0];

「foo」という名前の要素がない場合someElement、 の値が になることに注意してくださいundefined

于 2012-09-28T01:02:44.220 に答える