0

私の質問はそれに似ています: Dijit Menu (bar) with link

次のリストのように Dijit メニューを使用しています。

<div data-dojo-type="dijit/Menu">
    <div id="menuItem" data-dojo-type="dijit/MenuItem">
        <a href="http://url.com">urlLink</a>
    </div>
</div>

dojo.stopEventただし、_onClick()でブロックされているため、リンクは機能していません。

問題は
、dojo.stopEvent を削除して内部のリンクを<div id="menuItem" data-dojo-type="dijit/MenuItem">適切に機能させるにはどうすればよいかということです。

問題: onClick イベントを受け取る
必要があるいくつかのコードを内部に配置する必要があります。<div id=menuItem">

PS もともとこれは XPages コードです。

4

2 に答える 2

1

私は同じ問題に陥り、この投稿と関連する他の投稿を見ましたが、「onclick」ソリューションに満足していませんでした:

  • キーボードナビゲーションでは(私にとっては)機能しませんでした
  • 目立たないJavaScriptに期待するものではない宣言ゾーンに追加スクリプト要素(onclick = ...)を課します

最後に、dojo をさらに掘り下げて、ハンドラーの最初のサブノードの href 属性を直接使用することにしました。私のスクリプトセクション( dijit menus tutorialから派生)は次のとおりです。

<script>
    require([
        "dojo/dom",
    "dojo/parser",
    "dojo/dom-attr",
    "dojo/query",
        "dijit/registry",
        "dijit/WidgetSet", // for registry.byClass
        "dijit/Menu",
        "dijit/MenuItem", 
        "dijit/MenuBar",
        "dijit/MenuBarItem", 
        "dijit/PopupMenuBarItem",
        "dojo/domReady!"
    ], function(dom, parser, domattr, query, registry){
        // a menu item selection handler
        var onItemSelect = function(event){
            dom.byId("lastSelected").innerHTML = this.get("label");
            var achild = query("a", this.domNode)[0];
            if (achild != null) {
                var href = domattr.get(achild, "href");
                if ((href != null) && (href != '') && (href != '#')) {
                    window.location.href = href;
                }
            }
        };

        parser.parse();

        var setClickHandler = function(item){
            item.on("click", onItemSelect);
        };

        registry.byClass("dijit.MenuItem").forEach(setClickHandler);
        registry.byClass("dijit.MenuBarItem").forEach(setClickHandler);
    });
</script>

そうすれば、タイプのメニューで何も変更する必要はありません

<ul><li><a href="...">...</a></li></ul>

これは JavaScript が無効になっている場合に機能し、JavaScript が有効になっている場合、リンクはマウスとキーボードのナビゲーションで正常に機能します。body要素の「class = 'claro'」を忘れないでください....

于 2014-04-17T12:25:02.380 に答える