gpt4 book ai didi

javascript - 我无法理解代码的执行

转载 作者:行者123 更新时间:2023-12-03 11:04:25 25 4
gpt4 key购买 nike

我的代码:

<head>
<!-- All the required scripts and CSS -->
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script type="text/javascript" src="http://www.parsecdn.com/js/parse-1.1.14.min.js"></script>
</head>

<body>
<!-- Bootstrap nav-tabs -->
<ul class="nav nav-tabs" id="mainTabs">
<li class="active" ><a href="#home" data-toggle="tab"><span class="glyphicon glyphicon-home"></span> Home</a></li>
<li><a href="#group" data-toggle="tab" >Groups</a></li>
</ul>

<!-- Content of nav-tabs -->
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade active in" id="home">
home
</div>

<div class=" fade tab-pane" id="group" >
<div class="container">
<div class="row">
<div class="col-xs-12 col-md-12">
<h4>Groups</h4>
<button onclick="f5()"> Add Group</button>

</div>
</div>
</div>
</div>
</div>

<!-- Bootstrap Model -->
<div class="modal fade" id="myModal2">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" >Add New Group</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary btn-md" id="add" >Add</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->

<script type="text/javascript">

function f5() {
$('#myModal2').modal('show');
$('#myModal2').on('click','#add', function (e) {
console.log("new clicked");
$('#myModal2').modal('hide');
});
}

</script>

</body>

现在的问题是:
当我第一次点击 ID 为“add”的模型按钮时:

Output: new clicked (printed one time)

当我再次单击 ID 为“add”的模型按钮时:

Now, Output: new clicked (printed two times)

当我再次单击 ID 为“add”的模型按钮时:

Now, Output: new clicked (printed three times)

当我再次单击 ID 为“add”的模型按钮时:

Now, Output: new clicked (printed four times)

为什么会发生这种情况?我已经在堆栈溢出和谷歌上进行了搜索,但找不到任何对我有用的东西。我是 Bootstrap 的新手,我想要的是每次单击 id 为“add”的按钮时,“new clicked”应该只打印一次。

最佳答案

您可能想要检查 jQuery 中的 .off 方法。看来您正在为同一件事添加多个监听器,并且您可能希望在重新分配之前删除所有监听器以避免多次打印同一消息。

例如,在您的 f5 函数中(请从现在开始使用clear函数来使代码清晰),您每次执行时都会为同一元素创建一个新的监听器。.off() 将为您提供帮助,因为在附加新的事件监听器之前,它将删除之前添加的事件监听器。

但是,为了以正确的方式做事,您应该将事件监听器分组到单个方法(如“addEventListeners()”)中附加代码,并运行该函数一次。 (如果您在加载页面后向页面添加元素,则使用事件委托(delegate))。

function f5() { 
$('#myModal2').modal('show');
$('#myModal2').off('click'); // will remove any previous listeners attached with on
$('#myModal2').on('click','#add', function (e) {
console.log("new clicked");
$('#myModal2').modal('hide');
});
}

问候

关于javascript - 我无法理解代码的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27927690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com