9

同じ onChange() を複数の要素に割り当てることは可能ですか (jQuery なし)

現時点では私はやっています

var namefirst = document.getElementsByName("attribute.Identifier Source")[0];
namefirst.onchange = function () {//disable some stuff }

ただし、別の 5 つの要素に対してこの onChange() を実行する必要があるため、一度にすべての要素に対してこれを実行できるかどうか疑問に思っていましたか? それとも、要素ごとにこれを行う必要がありますか。

(私はJavascriptに非常に慣れていません)

4

5 に答える 5

6

どうですか:

var names = document.getElementsByName("attribute.Identifier Source");
for (var i = 0; i < names.length; i++) {
    names[i].onchange = function() {
        //do stuff
    }
}
于 2013-09-25T01:14:10.787 に答える
1

明らかに、要素をループして、ループ内でハンドラーを割り当てることができます。

function onChangeHandler() {
  // do some stuff
}

var myCollection = document.getElementsByName("attribute.Identifier Source");
for (var i=0, l=myCollection.length; i<l; i++)
  myCollection[i] = onChangeHandler;

または、変更された要素への参照が必要な場合:

function onChangeHandler(event) {
  // some browser abstraction
  if (!event) event = window.event;
  var changedElement = event.srcElement || this;
  // do some stuff
}

var myCollection = document.getElementsByName("attribute.Identifier Source");
for (var i=0, l=myCollection.length; i<l; i++) {
  myCollection[i].addEventListener('change', onChangeHandler, false);
  /* if you want to support older MSIE, you would do some like
  var el = myCollection[i];
  if (el.addEventListener) {
    el.addEventListener('change', onChangeHandler, false);
  }
  else if (el.attachEvent) {
    el.attachEvent('onchange', onChangeHandler);
  }
  */
}

document.getElementsByName() は XHTML でのみサポートされていることに注意してください。document.querySelectorAll() または document.getElementsByTagName() を使用することをお勧めします ...

于 2013-09-25T01:26:25.007 に答える
1

これを順番に行う別の方法があります。HTMLコードを擬似クラスでマークして、次のことを行うことができます:

var elems=document.querySelectorAll(".mark");
for(var i=0;i<elems.length;i++){
    elems[i].addEventListener("change", myFunction);
}

この方法は古いブラウザと互換性がないことに注意してください。詳細については、 こちらをご覧ください。

于 2013-09-25T01:49:36.633 に答える