我怎样才能避免写 10 个函数,让它只有一个
How can I avoid writing 10 functions, make it just one
编辑:谢谢,但这些答案不是最好的方法,初学者很难理解。
我有这个结构:
<div>Title <a href="#" onclick="a1()">+</a>
<div id="b1">...content...</div></div>
..... n times this structure ....
<div>Title <a href="#" onclick="function aN()">+</a>
<div id="bN">...content...</div></div>
当用户单击 + 号时,内容应显示或消失。
function a1(){
$('#b1').toggle();
}
.... too many functions .....
function aN(){
$('#bN').toggle();
}
如何在一个函数中重写所有这些函数以编写更少的代码?
您可以在标记本身中使其更具描述性,使用自定义属性data-target
(或使用 href 本身(并存储目标的 id。
<div>Title <a data-target="#b1" class="toggler" href="#">+</a>
<div id="b1">...content...</div></div>
..... n times this structure ....
<div>Title <a data-target="#b2" class="toggler" href="#" >+</a>
<div id="bN">...content...</div></div>
只需注册一个函数:-
$(function(){
$('.toggler').on('click', function(e){
e.preventDefault();
$($(this).data('target')).toggle();
});
});
这样,您可以将目标的任何选择器放在属性中,无论它出现在标记中的哪个位置(不仅仅是下一个元素(,并远离内联单击处理程序。
你可以通过使用通用类来将你的 JavaScript 挂接到来抽象你的代码。 js小提琴示例
.HTML
<div>
Title <a href="#" class="toggleNext">+</a>
<div id="b1">...content...</div>
</div>
jQuery
$('.toggleNext').click(function(e){
e.preventDefault();
$(this).next().toggle()
});
你试过吗?
<div>Title <a href="#" onclick="a('b1')">+</a>
<div id="b1">...content...</div></div>
..... n times this structure ....
<div>Title <a href="#" onclick="a('bN')">+</a>
<div id="bN">...content...</div></div>
function a(id){
$('#' + id).toggle();
}
<div class="container">Title <a href="#" class="link">+</a>
<div class="content">...content...</div></div>
..... n times this structure ....
<div class="container">Title <a href="#" class="link">+</a>
<div class="content">...content...</div></div>
<script>
$(".container .link").bind('click', function(event) {
event.preventDefault();
$(this).parent().find('.content').toggle();
});
</script>
向所有 + 锚点添加一个虚拟类。 例如 ANC
然后
$('.anc').on('click', function (){
$(this).next('div').toggle();
}
演示
HTML:使用 CSS 类
<div>Title <a href="#" class="myanchor">+</a>
<div id="b1">...content...</div></div>
<!--..... n times this structure ....-->
<div>Title <a href="#" class="myanchor">+</a>
<div id="bN">...content...</div></div>
.JS
$(function() {
$('a.myanchor').on('click', a);
function a(e) {
e.preventDefault();
$(this).next('div').toggle();
}
});
使用 jQuery 的 on
方法:
.HTML:
<div>Title <a href="#" class="toggle">+</a>
<div class="content">...content...</div></div>
<div>Title <a href="#" class="toggle">+</a>
<div class="content">...content...</div></div>
<div>Title <a href="#" class="toggle">+</a>
<div class="content">...content...</div></div>
JavaScript:
$(document).on('click', '.toggle', function(e) {
$(e.currentTarget).parent().find('.content').toggle();
});
工作 jsfiddle:http://jsfiddle.net/uq1mafs3/
首先,由于各种原因,使用内联事件处理程序被认为是糟糕的形式。
也就是说,有几种方法可以做你喜欢的事情。 就个人而言,我会选择这种方法:
<div>Title <a href="#" onclick="toggleThing()" data-thing-to-toggle="b1">+</a>
<div id="b1">...content...</div></div>
function toggleThing() {
var toggleId = this.getAttribute("data-thing-to-toggle");
var $target = $(toggleId);
$target.toggle();
}
一个简单的解决方案是传递元素的 id:
function a(id) {
$('#' + id).toggle();
}
您的 HTML 将如下所示:
<div>Title <a href="#" onclick="a('b1');">+</a>
<div id="b1">...content...</div></div>
..... n times this structure ....
<div>Title <a href="#" onclick="a('bN');">+</a>
<div id="bN">...content...</div></div>
您应该能够将要切换的元素的 id 作为函数参数传递:
<div>Title <a href="#" onclick="toggle('#b1')">+</a>
<div id="b1">...content...</div></div>
..... n times this structure ....
<div>Title <a href="#" onclick="toggle('#bN')">+</a>
<div id="bN">...content...</div></div>
然后,您可以只实现一个函数:
function toggle(id){
$(id).toggle();
}
有关更多信息,请参阅 JavaScript 函数参数。
相关文章:
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 在一个函数中,我有一个未捕获的语法错误:意外的标记else
- JS函数将一个空字符串传回php,但有一个值
- 是否有一个Javascript函数可以使代码在运行时延迟
- 代码在jsfiddle上运行良好,但有一个函数在网站上不起作用
- 我有一个用于 onclick 的窗口加载函数 如何添加 onblur 事件并合并为一个
- 为什么匿名函数之前有时会有一个分号
- 为什么某些函数调用在 v8 源的 JS 文件中前面有一个 %
- JavaScript:有没有更好的方法来使用回调函数做一个for循环
- 如果我有一个变量,分配给函数调用的值,如果函数调用的参数更改,是否可以更新该变量
- jQuery JavaScript 有一个像 parseInt for Boolean 这样的函数
- 我将一个函数(本身有一个参数)作为参数传递给另一个函数以及如何获取参数
- 我有一个函数,我只是想在滚动到特定元素时触发它
- 当有一个函数在 $(document).ready() 中
- 是否有一个jQuery函数来“快捷方式”if/else开关
- BMI 计算器希望有一个 parseInt() 函数
- 如何使用jQueryappend插入HTML部分包含onclick函数,该函数有一个参数
- 我有一个onClick angularjs函数有一个for循环,在第一次点击不工作
- 显示变量WTH函数有一个名称
- 传递的函数有一个不工作的变量