2017-12-16 1 views
0

HTML DOMでは、要素オブジェクトに要素とのユーザー対話をシミュレートする多数のメソッドがあります。javascriptでselectを更新すると、onchangeイベントリスナーも確実に起動するようにするにはどうすればよいですか?

などです。

  • .click()
  • .focus()
  • .blur()

所与の要素は、それに取り付けられたonclickイベントリスナーがある場合:

myElement.addEventListener('click', myFunction, false); 

をそのイベントリスナーがトリガされてもよいです、 javaとスクリプト:

myElement.click(); 

しかし<select><select><option>、イベントリスナーがある問題の要素がされた場合にどのような方法:そのイベントリスナーが

mySelect.addEventListener('change', myFunction, false); 

をトリガすることができますか?

全例:

var boxes = document.getElementsByClassName('box'); 
 
var clickBox = boxes[0]; 
 
var hoverBoxForClickBox = boxes[1]; 
 
var hoverBoxForSelect = boxes[2]; 
 

 
var select = document.getElementsByTagName('select')[0]; 
 
var options = select.getElementsByTagName('option'); 
 

 
function updateOption() { 
 

 
    for (var i = 0; i < options.length; i++) { 
 
     if (options[i].selected === true) { 
 
      options[i].removeAttribute('selected'); 
 
     } 
 
    } 
 
    
 
    options[1].selected = true; 
 
} 
 

 
clickBox.addEventListener('click', function(){console.log('Clickbox has been clicked');}, false); 
 

 
hoverBoxForClickBox.addEventListener('mouseover', function(){clickBox.click();}, false); 
 

 
select.addEventListener('change', function(){console.log(select.value + ' has been selected');}, false); 
 

 
hoverBoxForSelect.addEventListener('mouseover', updateOption, false);
.box { 
 
display: inline-block; 
 
width: 100px; 
 
height: 100px; 
 
color: rgb(255, 255, 255); 
 
font-weight: bold; 
 
line-height: 100px; 
 
text-align: center; 
 
font-family: arial, helvetica, sans-serif; 
 
cursor: pointer; 
 
} 
 

 
.clickbox { 
 
background-color: rgb(255, 0, 0); 
 
} 
 

 
.hoverbox { 
 
background-color: rgb(0, 0, 255); 
 
} 
 

 
select { 
 
margin-right: 36px; 
 
}
<div class="box clickbox">Click Me</div> 
 
<div class="box hoverbox">Hover Me</div> 
 

 
<select> 
 
<option value="option-1">Option 1</option> 
 
<option value="option-2">Option 2</option> 
 
<option value="option-3">Option 3</option> 
 
<option value="option-4">Option 4</option> 
 
<option value="option-5">Option 5</option> 
 
</select> 
 

 
<div class="box hoverbox">Hover Me</div>

あなたは二hoverboxがホバーしたとき、<option>は常にバックオプション2に変化していることがわかりますが、することができます...イベントリスナーは起動しません。

+0

:https://stackoverflow.com/questions/3996616/javascript-manually-firing-onchange-event#3996800 –

+0

_(ありがとうございますが、あなたがリンクしている質問は、上記の質問と非常に密接に関連していません)._ – Rounin

+1

私はそれを今取得します。私の答えを見てください。それはかなり実用的なアプローチですが、仕事をします。 –

答えて

1

名前のない関数を取り除き、古い名前の関数を使用してみませんか?

https://jsfiddle.net/4terzna8/

スニペット:

あなたが探しているかもしれないもの
function onChangeSelect(){ 
    console.log(select.value + ' has been selected'); 
} 

function updateOption() { 
for (var i = 0; i < options.length; i++) { 
    if (options[i].selected === true) { 
     options[i].removeAttribute('selected'); 
    } 
} 

options[1].selected = true; 

onChangeSelect(); 
} 
select.addEventListener('change', onChangeSelect, false); 
+0

任意のホバーは 'option-2が選択されました 'というメッセージをトリガーします。変更がなかったとしても、以前はオプション2が選択されていました。それが問題である場合は、それを更新する前に現在の値をチェックし、実際の変更が行われた場合にのみonChangeSelect()を呼び出さなければなりません。 –

+0

はい、それは理にかなっています。イベントリスナーがjavascriptで起動された 'change'イベントを「聞く」ことができない場合、名前付き関数を別々に呼び出すことは有効な選択肢です。ありがとうございました。 – Rounin

関連する問題