0

JavaScript コードに名前空間を使用していますが、select 要素のonchange属性でレンガの壁にぶつかったと思います。名前空間を使用して (または名前空間を使用せずに) 関数を呼び出そうとすると、エラー コンソールに関数が見つからないことが報告されます。

var MYNS = {}; //namespace
MYNS.modifySearchPage = function () {
    ....
    var eSelect = document.createElement("select")
    .....
    eSelect.setAttribute('onchange', 'MYNS.handleChange(this)');
    .....
    //set up the options (value, textcontent, eSelect.appendChild(theOption)
    ...
    // add the eSelect to the DOM
}
MYNS.handleChange = function (select) {
    //parse the select options
}

ドロップダウン リストから項目を選択すると、コンソールに表示される結果は次のとおりです。 Uncaught ReferenceError: MYNS is not defined

名前空間をウィンドウに追加しようとしましたが、それは役に立たないようです (そして、それが安全なことであるとは確信していません)。

select要素にonclickハンドラを追加しようとしましたが、 selectはonclicksを処理しないため、明らかに悪い考えです。

呼び出しと関数定義の両方から MYNS を削除しても、役に立ちませんでした。

何か案は?

ありがとう、ムウルフ

4

2 に答える 2

4

属性を使用してハンドラをアタッチしないでください - プロパティを使用してください:

eSelect.onchange = function() {
    MYNS.handleChange(this);
};

より一般的には、標準およびより推奨されるものも使用できますaddEventListener

function changeHandler() {
    MYNS.handleChange(this);
}

if (eSelect.addEventListener) {
    eSelect.addEventListener('change', changeHandler, false);
} else if (eSelect.attachEvent)  {
    eSelect.attachEvent('onchange', changeHandler);  // fallback for IE
}

また、電話をかけることができることも注目に値します

eSelect.addEventListener('change', MYNS.handleChange, false);

ただし、コールバックを変更する必要があります。渡される引数はイベント オブジェクトになりthis、関数内ではイベントをトリガーした要素が参照されます。

于 2013-03-14T01:57:30.877 に答える
1

間違った大文字MyNS.handleChangeと小文字の別の単語をコーディングするだけですMYNS.handleChange。JavaScript 変数では、大文字と小文字が区別されます。

于 2013-03-14T01:58:03.017 に答える