0

コンテキスト駆動メニューを作成したいと思います。このメニューは、ユーザーがツリー内のいずれかのノードをクリックすると表示されます。各ノードには「treedropdownmenu」というクラスがあります。ノードがクリックされると、コンテキスト駆動型メニューが開きます。「_deleteClick」メソッドに「削除」メニュー オプションを指定して渡しています。しかし、「_deleteClick」メニューが見つかりませんというエラーが表示されます。

私のウィジェットには次のコードがあります:

$(".treedropdownmenu").live("click", function (event) {
    var pos;
    if(($(window).height() - event.pageY) < 80) {
        pos = {
            left: event.pageX + 20,
            top: event.pageY - 60
        };
    } else {
        pos = {
            left: event.pageX + 20,
            top: event.pageY + 20
        };
    }
    if(ko.dataFor(this).nodeId() && ko.dataFor(this).nodeId() !== 0) {
        var item = ko.dataFor(this);
        var strHtml = "<a href='#' onclick='_deleteClick(item)'>Delete:</a> " + "<br/>" + "<b>Create Date:</b>" + "<br/>" + "<b>Exposed Party Name:</b>" + "<br/>" + "<b>Portfolio Type:</b>" + "<br/>" + "<b>Owner:</b>";
        $("#dataManagerMenuItem1234").show().offset(pos).html(strHtml);
    }
});

私が持っている削除メニューは次のとおりです。

function _deleteClick(item) {
    alert("delete clicked");
}

誰が私がどこで間違っているのか教えてもらえますか?

4

4 に答える 4

1

ええ、うまくいかないと思います。これを試して:

var strHtml = "<a href='#'>Delete:</a> " + "<br/>" + "<b>Create Date:</b>" + "<br/>" + "<b>Exposed Party Name:</b>" + "<br/>" + "<b>Portfolio Type:</b>" + "<br/>" + "<b>Owner:</b>";
 $("#dataManagerMenuItem1234").show().offset(pos).html(strHtml).find('a').click(function() { _deleteClick(item); });
于 2012-06-26T02:51:10.383 に答える
1

これは、リンクにイベント ハンドラーを追加するための一種の不器用な方法です。特に、とにかくプログラムで作成しているためです。クリック ハンドラーを動的に追加してみませんか?

var item = ko.dataFor(this);
var deleteLink = $('<a>', {
    href: '#',
    click: function() {
        _deleteClick(item);
    },
    text: 'Delete:'
});
$("#...").show().offset(pos).append(deleteLink);
于 2012-06-26T02:54:00.103 に答える
0

イベント ハンドラーを文字列に追加しないでください。これは悪い習慣です。

var strHtml = "<a href='#'>foo</a>;
var lnk = jQuery(strHtml);
lnk.on("click", function(){ _deleteClick(item); });
$("#dataManagerMenuItem1234").show().offset(pos).append(lnk);
于 2012-06-26T02:51:56.493 に答える
0

すべてのコードをここに投稿したわけではありませんが_deleteClick、ローカル スコープで関数を定義したと仮定し、onclick ハンドラーはグローバル スコープからアクセスできません。onclickこれが、属性を使用してイベントを DOM 要素に関連付けるべきではない理由の 1 つです。文字列として書き出された onclick 属性は、正しいコンテキストで実行されません。代わりに jQuery を使用してサブスクライブしてください。

KnockoutJS を使用しているようです。これを行うためのさらに良い方法は、ノックアウト テンプレートを使用してメニューを書き出すことです。

于 2012-06-26T02:59:24.127 に答える