如何创建 Javascript 函数来管理(Bootstrap)下拉菜单点击,而不是创建大量侦听器?

Posted

技术标签:

【中文标题】如何创建 Javascript 函数来管理(Bootstrap)下拉菜单点击,而不是创建大量侦听器?【英文标题】:How can I create a Javascript function to manage (Bootstrap) dropdown menu clicks instead of creating a large number of listeners? 【发布时间】:2021-10-15 01:52:56 【问题描述】:

我的项目有大量的下拉菜单。我目前的方案是为每个控件创建 jquery 侦听器,但是,单个函数可以完成相同的任务似乎是合理的。 请查看标记中的 onlick 事件。

<div class="input-group">
   <div class="input-group-prepend">
      <button id="PrimaryPhoneType" class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Type</button>
      <div id="ddlPrimaryPhoneType" class="dropdown-menu" onclick="ManageDDlClicks('ddlPrimaryPhoneType','tbPriPhoneType')">
         <a class="dropdown-item" href="#">Cell</a>
         <a class="dropdown-item" href="#">Home</a>
         <a class="dropdown-item" href="#">Work</a>
      </div>
   </div>
   <input type="text" class="form-control" id="tbPriPhoneType" runat="server">
</div>

当前监听方案:

  $('#<%=ddlPrimaryPhoneType.ClientID %> a').click(function () 
     $('#<%=tbPriPhoneType.ClientID %>').val($(this).html());
  );

提议的新功能:

function ManageDDlClicks(src, tgt) 
   let list = document.getElementById(src).getElementsByTagName('a');
   console.log(list);
   var selItem = list.???
   document.getElementById(tgt).value = selItem

调试和研究“列表”的内容,我在节点中看不到指向哪个项目被选中的任何内容。

【问题讨论】:

【参考方案1】:

我不能 100% 确定我是否正确理解了您,但我会在标记中删除 onClick,并创建一个可以处理所有单击事件的事件处理程序。如果您的标记保持一致,则可以使用以下方法:

$('.dropdown-menu a').click(function () 
  $(this).parents('.input-group-prepend').next().val($(this).text())
);

https://jsfiddle.net/p03btj92/

当然有不同的方法:

$('.dropdown-menu a').click(function () 
  $(this).parents('.input-group').find('input[type="text"]').val($(this).text())
);

https://jsfiddle.net/af4ke57b/

使用基于 id 的选择器将要求您专门为要与之交互的每个元素编写代码。这个想法是改用$(this) 选择器,与可重用类结合使用。

您可以从那里使用DOM Traversal Methods 找到您要修改的元素。在这种情况下,使用了 parents、next 和 find。

【讨论】:

如此简单。非常感谢。

以上是关于如何创建 Javascript 函数来管理(Bootstrap)下拉菜单点击,而不是创建大量侦听器?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript小括号“()”的多义性

Falsy Bouncer

从 JSON 中提取数据的 Javascript 函数?

使用 Django,如何在我的 javascript 中检测到管理员?

如何从 SQL where 子句创建一个 JavaScript 函数,以将其作为谓词传递给 JavaScript 数组的过滤函数?

JavaScript高手之路:构造函数方式封装对象