javascript - 如何将 JavaScript 的范围设置为部分视图?
问题描述
我有一个 ASP.NET 部分视图
<div class="wrapper">
<div class="remove-item"></div>
<input name="Account" class="currency" />
...some more html input elements removed for brevity
</div>
局部视图有自己的 JavaScript
<script type="text/javascript">
$(function(){
$(".remove-item").click(function(){
var i = $("input.currency");
// do something
})
})
</script>
在一个页面上,这个局部视图会出现多次。每个input
元素都有唯一的名称。然而 JavaScript 是使用类名来选择元素。
问题是当局部视图的第二个实例呈现时,$(".remove-item")
也会从第一个局部视图中选择元素。因为它扫描整个 DOM。
在这里确定 JavaScript 范围的最佳方法是什么,以便它只选择具有自己范围的元素?
只选择元素
解决方案
在处理未知数量的重复元素时,您可以使用事件委托。与其多次输出 JS 并在每个部分上都有一个事件侦听器,不如将其输出一次并且整个部分集只有一个事件。无论页面上最终有多少元素,即使动态显示更多元素,您的事件仍然会触发:
- 仅输出此 JavaScript 一次:
<script type="text/javascript">
$(".containing-parent").on('click', '.remove-item', function() {
var i = $(this).closest('.wrapper').find('input.currency');
});
</script>
- 用可以附加一个事件的 div 包装您的部分:
<div class="containing-parent">
...partials go here
</div>
您需要确保您的 javascriptdiv.containing-parent
在执行时可以找到。
例子:
$(".containing-parent").on('click', '.remove-item', function() {
var i = $(this).closest('.wrapper').find('input.currency').val();
console.log(i);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="containing-parent">
<div class="wrapper">
<div class="remove-item">X</div>
<input name="Account1" class="currency" value="1" />
</div>
<div class="wrapper">
<div class="remove-item">X</div>
<input name="Account2" class="currency" value="2" />
</div>
<div class="wrapper">
<div class="remove-item">X</div>
<input name="Account3" class="currency" value="3" />
</div>
</div>
推荐阅读
- java - Idea 在生成的源代码中报告了许多错误
- arduino - MIFARE 卡读取失败后的身份验证
- android - 将英文国名翻译成法文(API 19)
- android - 无法在片段中的按钮上使用 setOnClickListener
- python - 如何在 Python pyqt4 GUI 设计中使用线程
- java - 警告:遇到 c3p0 属性,但在类路径中找不到 c3p0 提供程序类
- python - python 性能瓶颈与 lil_matrix
- node.js - 简单的待办事项应用程序在 Heroku 上崩溃(本地工作正常)
- python - 如何在 Windows 上安装 Qtwebengine
- ruby-on-rails - Sidekiq容器未知文件的YAML解析错误