使用参数调用 JavaScript 处理程序
Call a javascript handler with parameters
我有一个调用另一个方法的方法(在 ajax 加载上,但这与这个问题无关)。我想将参数传递给此方法。这怎么可能?
下面的页面应该在单击按钮时滚动到 id 25(可滚动区域在代码隐藏中动态添加。 这只是我试图完成的一个例子)
.JS
<%@ Page Language="C#" Inherits="APTEIT.scrolltest" %>
<html>
<head>
</head>
<body>
<script type="text/javascript">
function callHandler(handler) {
handler();
}
function scroll(id) {
alert("scrolling");
$("#divy").scrollTop($("#"+id).position().top);
}
</script>
<input type="button" value="scroll" onclick='var scroll={param1: "25"};callHandler(scroll)' />
</body>
</html>
您似乎没有将参数传递到 callHandler
方法中的处理程序中 - 相反,您尝试调用 scroll
参数(var scroll={param1: "25"}
)作为函数。
对象和函数名称使用相同的名称scroll
。请使用不同的名称:)此外,您声明和使用的功能签名不一致。scroll
函数在您尝试传入对象时接受字符串id
。
除非我误解了,否则handler
是一个function
那么像任何正常情况一样将参数传递给它。
function callHandler(handler){
var passme = "test";
handler(passme);
}
更新 1
我认为在这种情况下,您可以做的是在input
元素的上下文中使用 this
关键字。这在您的实例中最终要做的是将id
替换为 this
.这也将删除其他选择。试试这个:
function callHandler(handler)
{
handler();
}
function scroll()
{
$("#divy").scrollTop($(this).position().top);
}
this
可能不起作用,因为我不确定上下文是input
还是callHandler
,试一试! :)
源语言
您应该能够像这样将参数传递到处理程序中:
function callHandler(handler)
{
var param = 'Hello world';
handler(param);
}
callHandler(function(phrase)
{
alert(phrase);
});
将参数放入一个对象中,如下所示:
var handler = {
param1: 'val1',
param2: 'val2' //ect...
}
handler(handler);
编辑:
改变:
$("#divy").scrollTop($("#"+id).position().top);
自:
$("#divy").scrollTop($("#"+id.param1).position().top);
应该适用于您编辑的问题。
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在AJAX回调和呈现PIXIJS之间处理程序流时遇到了问题
- Adobe Edge:动画完成时添加onComplete处理程序
- 是否可以从输入处理程序中确定输入的类型
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 平均值.on(事件[,选择器][,数据],处理程序)
- getSript在同一对象上多次添加处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何让React JS点击处理程序在执行时更新DOM
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- Backbone listenTo不将jquery函数作为处理程序进行激发
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数