8

This doesn't seem to be working:

<select id="mySel" onchange="alert('foo')">
    <option value="a">a</option>
    <option value="b">b</option>
</select>

<script>
dojo.byId('mySel').value = 'b'; // select changes, but nothing is alerted
</script>

(I'm using dojo, but that doesn't really matter.)

4

6 に答える 6

8

「onchange」という名前は、変更イベントと変更される値が同じものではないことを理解していない限り、誤解を招く可能性があります。ユーザーがブラウザで値を変更すると、変更イベントが発生します。dojo.byId('mySel').onchange()ただし、プログラムで値を変更した後に呼び出すことで、手動でイベントを発生させることができると思います。(ただし、実際には を呼び出す関数を定義する必要があるかもしれませんalert。私はこれを自分で行っていません。)

于 2009-08-03T21:40:19.503 に答える
3

これにより値が変更されますが、onchange イベントは発生しません。JavaScript で要素を変更しても、イベントは発生しません (再帰の問題が発生するのを防ぎます*)。

そのようにイベントハンドラを設定した場合。

function myHandler(){
  //do whatever stuff here
  changeColor( dojo.byId('mySel') );
}

プログラムで値を設定した後、これを個別に呼び出すことができます。

注 (*): 私は道場の専門家ではないので、JavaScript から値を設定するときにイベント ハンドラーの自動呼び出しを "追加" していないと推測しています。

于 2009-08-03T21:37:24.687 に答える
2

これらの質問とその回答をご覧ください: 役立つかもしれません:

于 2009-08-03T21:36:58.073 に答える
1

イベント「onpropertychange」にアクセスできます。これには、変更されたプロパティを識別するためのイベント引数内のプロパティが含まれています。

'selectedIndex' と 'value' の両方の変更を検出します - 単にケース テスト 'propertyName'

<select id="mySel" onpropertychange="dothis(event);">
    <option value="a">a</option>    
    <option value="b">b</option>
</select>

function dothis(event)
{

    if (event.propertyName == "selectedIndex")
            alert('selection changed');
}

私の頭の上から...(現在、かなり異なるasp.net jsフレームワークを使用しています)

于 2009-09-07T22:19:11.627 に答える
0

代わりに selectedIndex を割り当ててみてください。

于 2009-08-03T21:37:53.097 に答える