微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何确保在此类项目的呈现时间将正确的对象引用传递给 UI 项目的点击处理程序?

如何解决如何确保在此类项目的呈现时间将正确的对象引用传递给 UI 项目的点击处理程序?

我需要从动态创建的订单项向 Javascript 函数发送 3 个参数。但我很难通过它们。第一个参数是一个对象“chatHub”,另外两个是字符串“userName”和connectionId。有没有办法使用模板文字传递这些?

此处是创建动态订单项的位置:

    function getUserNotifications(chatHub) {
    $('#notiContent').empty();
    $.each(connectedUsers,function (index,value) {
        $('#notiContent').append($(`<li onclick="OpenPrivateChatwindow(` + chatHub + ',' +`'${value.UserName}'` +','+ `'${value.ConnectionId}')">Chat With : ${value.UserName}</li>`));
    })
}

我需要传递给这个函数,但它不起作用:

    function OpenPrivateChatwindow(chatHub,userName,connectionId) {

    var ctrId = 'private_' + connectionId;

    if ($('#' + ctrId).length > 0) return;
    $("#ViewChatModal").modal({});
   $('#btnSendMessage').click(function () {

    var msg = $('#txtPrivateMessage').val()
        if (msg.length > 0) {

            chatHub.server.sendPrivateMessage(connectionId,msg);
             
        }
    })
    

解决方法

function registerUserNotifications(chatHub) {

  const rootNode = $('#notiContent');
  rootNode.empty();

  $.each(connectedUsers,function (index,value) {

    const connectionId = value.ConnectionId;
    const userName = value.UserName;
    const listItem = $(`<li>Chat With : ${ userName }</li>`);

    listItem.on( "click",function(/*evt*/) {
      OpenPrivateChatWindow(chatHub,userName,connectionId);
    });

    rootNode.append(listItem);
  });
}
,

您不能以这种方式传递对象,但您可以做的是创建 li 元素,向您将传递函数的对象添加一个侦听器。下面是一个简单的例子。

您当前正在传递文字等的地方,不要。用它创建一个新元素,然后将一个事件观察器添加到该观察器中以观察点击。

let liElement = $(`<li>Chat with ${value.UserName}</li>`);
$('#notiContent').append(liElement)
liElement.on('click',() => { OpenPrivateChatWindow(ChatHub,variable... ) })

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。