4

タイトルを注意深く読んでください - これは一般的な onchange のことではありません。

Web ページに選択ボックスが存在します。selectbox の selectedIndex は、javascript、外部js によってプログラムで変更できます。

インデックスが変更されたときに通知を受け取りたい (クロスブラウザー ソリューション)。これは可能ですか?


jsfiddle の例を考えてみましょう


または HTML:

<select id="mySelect">
    <option>opt 1</option>
    <option>opt 2</option>
    <option>opt 3</option>
</select>​

JavaScript:

// Code I cannot manipulate
var select = document.getElementById("mySelect");
select.selectedIndex = 2; // I would like to be notified now

あなたの洞察を待っています:-)

アップデート:

これは私の元の質問には答えませんが、これを使用して、最初に望んでいたことを達成することができました(投稿の一部ではありません):

select.selectedIndex = 2;
select.onchange();
4

4 に答える 4

0

選択ボックスの変更を間接的にトリガーしたことに気づきました。これにより、その直後にチェックを行うことができます。リスナーほど優れているだけでなく、機能し、それほど汚れることはありません:-)

少なくとも、そのようなイベントはないことを確認しました。有難うございます。

于 2012-07-12T11:13:06.157 に答える
0

Javascript変更イベントには、ユーザーが開始するブラウザーイベントが必要です。JavaScript自体によって変更がトリガーされた場合は機能しません。

本当にこれを実行したい場合は、<select>を使用して定期的にの値をポーリングし、setInterval比較を行う関数を作成する必要があります。

var selectold =  select.selectedIndex;
setInterval(function(){
    if(selectold != select.selectedIndex)
       {
           console.log("there was a change");
           selectold = select.selectedIndex;

       }
},500);

編集されたフィドル

于 2012-07-12T10:07:40.053 に答える
-1

selectedIndex を更新するコードを制御する場合、コールバックを挿入して、イベントのような動作を行うことができます。

/* code that I do not wish/'cannot' change: */
function startSelectScroll(indexChangeCallback) {
    var select = document.getElementById("mySelect");

    var index = 0;
    var myInterval = setInterval( function() { // Change index every 500ms

        index++;
        select.selectedIndex = index % 3;

        indexChangeCallback.call(select);
    }, 500 );

    setTimeout( function() { // Remove automatic change after 3000ms
        clearInterval( myInterval );
        alert(callCount);
    }, 3000 );
}
/* end unmodifiable code */

startSelectScroll(function() {
    callCount++;
});

var callCount = 0;

制御しない場合は、使用するフレームワークが同じ方法でコールバックをサポートする必要があります。

于 2012-07-12T10:30:58.773 に答える
-2

最初に頭に浮かんだのは;

function alertMe(theSelect) {
    var mySelectList = document.getElementById(theSelect);  
    var result = mySelectList.options[mySelectList.selectedIndex].value;
    alert(result); // Alerts selected option
}

html:

<select id="mySelect" onchange="javascript:alertMe("mySelect")">
    <option value="A"> A text </option>
    <option value="B"> B text </option>
    <option value="C"> C text </option>
<select>

これにより、選択したオプションの値フィールドが得られます。最後に「.value」を「.text」に置き換えてテキスト フィールドを取得することもできます。

于 2012-07-12T11:02:04.110 に答える