簡體   English   中英

在javascript中將函數寫為字符串

[英]Write function as a string in javascript

我想創建一個上下文驅動的菜單。 當用戶單擊樹中的任何節點時,會出現此菜單。 每個節點都有一個“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");
}

誰能讓我知道我哪里錯了?

是的,我認為這不會起作用。 嘗試這個:

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); });

這是一種向鏈接添加事件處理程序的笨拙方式,特別是因為您無論如何都是以編程方式創建它。 為什么不動態添加點擊處理程序,如此?

var item = ko.dataFor(this);
var deleteLink = $('<a>', {
    href: '#',
    click: function() {
        _deleteClick(item);
    },
    text: 'Delete:'
});
$("#...").show().offset(pos).append(deleteLink);

不要在字符串中添加事件處理程序,這是不好的做法。

var strHtml = "<a href='#'>foo</a>;
var lnk = jQuery(strHtml);
lnk.on("click", function(){ _deleteClick(item); });
$("#dataManagerMenuItem1234").show().offset(pos).append(lnk);

您尚未在此處發布所有代碼,但我假設您已在本地范圍內定義了函數_deleteClick ,並且您的onclick處理程序無法從全局范圍訪問它。 這是您不應該使用onclick屬性將事件附加到DOM元素的原因之一! 您的onclick屬性(以字符串形式寫出)不會在正確的上下文中執行。 使用jQuery來訂閱。

看起來你正在使用KnockoutJS。 更好的方法是使用Knockout模板寫出你的菜單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM