在定义事件时包含参数
Including an argument when defining an event
让我在前面加上一句话,我从不使用匿名函数。直到我停止使用匿名函数,我才理解异步JavaScript。
话虽如此(答案中不要使用匿名函数(:
Q: 有没有更直接的方法来写这篇文章,让函数volume用一个参数来调用(而不需要先调用一个函数来调用函数volume(?
$(document).on('click','.glyphicon-volume-up',volumeOff)
$(document).on('click','.glyphicon-volume-off',volumeUp)
function volumeOff() {
volume(0)
}
function volumeUp() {
volume(1)
}
function volume(arg) {
}
我想做一些类似的事情:
$(document).on('click','.glyphicon-volume-up',volume(0))
$(document).on('click','.glyphicon-volume-off',volume(1))
而不使用匿名函数。
根据jQuery的文档,我经常使用格式
$(document).on('click', '.glyphicon-volume-up', 0, volume);
通过这种方式,可以通过事件处理程序函数中的e.data访问参数(可能是0或1,在其他情况下甚至可能是对象或任何您喜欢的对象(。这意味着你可以像一样访问它
function volume(e) {
var vol = e.data;
}
不过,重要的是,将事件对象e作为参数添加到函数定义中,使其可用于处理程序函数。
您不需要绑定新函数。您可以使用jQuery的事件数据重用相同的函数。
$(document).on('click','.off', 0, volume)
$(document).on('click','.up', 1, volume)
function volume(event) {
alert(event.data);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button class=up>UP</button>
<button class=off>OFF</button>
你可以试试这个:
$(document).on('click','.glyphicon-volume-up',volume.bind(null, 0));
$(document).on('click','.glyphicon-volume-off',volume.bind(null, 1));
上面我们使用了bind
方法,它允许我们调用一个提供其上下文的函数,即this
的值(在这种情况下,这无关紧要,因此我们传递null(,并传递其参数的值。
另一种选择是使用apply
或call
方法。
有关bind
方法的详细说明,请查看此处。
您可以使用data
参数
.on(事件[,选择器][,数据],处理程序(
$(document).on('click','.glyphicon-volume-up', {value: 0}, volumeOff);
$(document).on('click','.glyphicon-volume-off', {value: 1}, volumeUp);
function volumeOff(e) {
volume(e.data.value);
}
function volumeUp(e) {
volume(e.data.value);
}
您可以使用proxy
方法来指定函数的上下文和参数:
$(document).on('click','.glyphicon-volume-up', $.proxy(volume, this, 0));
$(document).on('click','.glyphicon-volume-off', $.proxy(volume, this, 1));
proxy
方法是独立于浏览器的bind
方法的替代品,因为一些较旧的浏览器不支持它。
相关文章:
- 传递包含'%的参数'在URL中
- 如何使用JQuery在HTML中创建包含字符串参数的引号的onclickjavascript链接
- 建议将包含不同参数的内联JS转换为外部脚本
- Javascript-将包含变量的html字符串作为参数传递
- 如何正确地包含带有参数的谷歌地图API
- 如何存储包含参数的JS函数引用
- 在动态创建的元素中包含参数的事件处理程序
- 如何根据URL参数生成包含JS内容的单个HTML文件
- 为javascript函数提供可能包含特殊字符的字符串参数
- 使用包含参数数组的数组调用函数,而不是仅列出数组
- j查询触发器单击如果 URL 包含参数
- 使用grunt运行一个包含参数的文件
- 如何在脚本中包含参数引号's代码,这样用户就不会'不必
- 修改find()以包含参数
- 在定义事件时包含参数
- Jquery测试url是否已包含参数
- 在包含参数的函数中添加事件侦听器是一种好的做法吗
- 子进程 - Node.js with CasperJs:如何包含参数
- 检查URL是否在Javascript中包含参数
- 传递一个包含参数的回调函数