0

Javascript名前空間について発見した後、それらを実装しようとしましたが、要素のonclickに名前空間メソッドをアタッチしようとしたときに問題が発生しました。

このメソッドを使用して、関数/メソッド/クラスをまとめました(実際のコードではなく、単純化された概念)。

;(function(window, undefined) {

    //my namespace
    var NS = {};

    NS.test = {
        f : function(param) {
            alert(param);
        }
    }

    NS.test.('test 2');

})(window);

内部では、すべてが正常に機能し、「テスト2」が表示されます。

ただし、次のようにして、その関数をクリックイベントにアタッチしようとすると、次のようになります。

<a href-"#" onclick="NS.test.f('test');">Click me!</a>

パーツの後でその関数を呼び出したときに機能しないのと同じように、機能しません})(window);

私はそれを呼んでみましwindow.NS.test.f('test');たが、効果はありませんでした。

onclickイベントで関数を呼び出すにはどうすればよいですか?

他のhtml要素の場合と同じように、ラッパー内にイベントリスナーを問題なくアタッチできますが、この場合、JavaScriptを使用してリンクを生成しているため、問題が発生しますonclick="doSomething"。すべてを追加する方が簡単で簡単です。リンクを作成する代わりに、リンクをキャッシュしてイベントリスナーを追加します。

私を怠惰と呼んでください、しかしこの特定の場合、私はすることを好みます

someDiv.innerHTML = my_Generated_Html_Code_With_OnClick;

それ以外の

//demo code, ignore the flaws and the fact it won't work on IE
someDiv.innerHTML = my_generated_Html_code;
myLink = document.getElementById(id);
myLink.addEventListener('mousedown', NS.test.f('test'));

いわゆるバニラJavaScriptを最初に理解しようとしているので、フレームワークを使用したり、使用したりすることはありません。

ここにjsfiddleを設定しました。

PS名前空間を完全に理解していなかったことを認めなければならないので、ここで何か間違ったことをしたり、想定外の方法で概念を適用したりする場合は、ヒントや修正をいただければ幸いです。

4

1 に答える 1

4

これNSは、が内部で宣言されているため、関数内にのみ存在するためです。

function(window, undefined) {
    var NS = {};

    // NS exists here ...
}

// ... but not here

ページの残りの部分で利用できるようにする場合は、次の操作を実行できます。

function(window, undefined) {

    var NS = window.NS = {};

    // NS and window.NS exist here ...
}

// ... and window.NS exists here.
于 2012-07-05T09:11:08.313 に答える