触发孩子时如何更改父母的值?

Posted

技术标签:

【中文标题】触发孩子时如何更改父母的值?【英文标题】:How to change the value of parent when i trigger a child? 【发布时间】:2021-09-26 06:27:30 【问题描述】:

我想做一些类似下拉菜单的操作,以便我的用户可以选择他们想要 gmail、hotmail 还是 Outlook。然后,我希望按钮更新以显示他们的偏好。由于分配原因,我必须只使用引导程序,因此不能使用

到目前为止,我已经尝试给他们所有相同的id,但是JS只是使用第一个,我不想给他们所有不同的ID(太麻烦了)。所以我写的是使用子编号(如数组)并将值放入按钮中。但是,我不知道如何找出当前 html 标记的位置编号。请帮助我,并提前感谢您的帮助

使用的引导 CDN(引导 4.6.0): 链接 rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" 完整性="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2 +l" crossorigin="匿名"

<div class="input-group-append">
  <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" id='btnemailexample'>@example.com</button>
  <div class="dropdown-menu"  id='emailexample'>
    <a class="dropdown-item" role='button' onclick='example()'>@gmail.com</a>
    <a class="dropdown-item" role='button' onclick='example()'>@hotmail.com</a>
    <a class="dropdown-item" role='button' onclick='example()'>@outlook.com</a>
    <a class="dropdown-item" role='button' onclick='example()'>@yahoo.com</a>
  </div>
</div>
<script>
   function example()  
var c = document.getElementById('emailexample').children;
txt = c[i].textContent
document.getElementById("btnemailexample").innerHTML = txt;
   
   
</script>

【问题讨论】:

【参考方案1】:

在您的情况下,您不需要搜索 id 或孩子,您可以使用事件参数。

<div class="input-group-append">
  <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" id='btnemailexample'>@example.com</button>
  <div class="dropdown-menu"  id='emailexample'>
    <a class="dropdown-item" role='button' onclick='example(event)'>@gmail.com</a>
    <a class="dropdown-item" role='button' onclick='example(event)'>@hotmail.com</a>
    <a class="dropdown-item" role='button' onclick='example(event)'>@outlook.com</a>
    <a class="dropdown-item" role='button' onclick='example(event)'>@yahoo.com</a>
  </div>
</div>
<script>
   function example(event)  
    var txt = event.target.textContent;
    document.getElementById("btnemailexample").innerHTML = txt;
   
   
</script>

【讨论】:

【参考方案2】:

在这种情况下,最好的解决方案是使用事件委托,这将减少您的 ID 或类标记问题,为每个元素添加功能等。它还将帮助您获得所需的数据。

这是event delegation上的一篇好文章

【讨论】:

【参考方案3】:

这应该可以解决问题!

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>


<div class="dropdown">
  <button class="btn btn-secondary dropdown-toggle" type="button" id='btnemailexample' data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
     @example.com
  </button>
  <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
    <a class="dropdown-item" href="#" role='button' onclick='example(this)'>@gmail.com</a>
    <a class="dropdown-item" href="#" role='button' onclick='example(this)'>@hotmail.com</a>
    <a class="dropdown-item" href="#" role='button' onclick='example(this)'>@outlook.com</a>
    <a class="dropdown-item" href="#" role='button' onclick='example(this)'>@yahoo.com</a>
  </div>
</div>

<script>
function example(el) 
  var txt = el.textContent;
  document.getElementById("btnemailexample").innerHTML = txt;

</script>

【讨论】:

【参考方案4】:

如果你有一些像 jQuery 这样的 javascript 库,你可以做得更好。我会告诉你如何通过这两种方式做到这一点。

请注意,我没有链接任何样式。因此,请务必将它们链接起来以获得更好的可见度。

使用核心 Javascript

// Add event listener to table
const el = document.getElementById("emailexample");
el.addEventListener("click", function(e) 
  e = e || window.event;
  var target = e.target || e.srcElement,
    text = target.textContent || target.innerText;
  document.getElementById("btnemailexample").textContent = text;
, false);
<div class="input-group-append">
  <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" id='btnemailexample'>@example.com</button>
  <div class="dropdown-menu" id='emailexample'>
    <a class="dropdown-item" role='button'>@gmail.com</a>
    <a class="dropdown-item" role='button'>@hotmail.com</a>
    <a class="dropdown-item" role='button'>@outlook.com</a>
    <a class="dropdown-item" role='button'>@yahoo.com</a>
  </div>
</div>

使用 jQuery

​​>

$("#emailexample .dropdown-item").on('click', function(e) 
  e.preventDefault();
  var text = $(this).text();
  $("#btnemailexample").text(text);
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="input-group-append">
  <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" id='btnemailexample'>@example.com</button>
  <div class="dropdown-menu" id='emailexample'>
    <a class="dropdown-item" role='button'>@gmail.com</a>
    <a class="dropdown-item" role='button'>@hotmail.com</a>
    <a class="dropdown-item" role='button'>@outlook.com</a>
    <a class="dropdown-item" role='button'>@yahoo.com</a>
  </div>
</div>

【讨论】:

以上是关于触发孩子时如何更改父母的值?的主要内容,如果未能解决你的问题,请参考以下文章

当孩子依赖父母,父母依赖孩子时,浏览器如何计算宽度

孩子们如何收听/捕捉父母的事件

父母和孩子的向量 C++

当父母在Android中折叠时如何更改可扩展列表视图子项的视图?

Vue - 将数据从孩子传递给父母 - 基本发射不起作用

NSManagedObjectContext - 当父母改变时如何更新孩子?