使用参数调用 JavaScript 处理程序

Call a javascript handler with parameters

本文关键字:处理 程序 JavaScript 调用 参数      更新时间:2023-09-26

我有一个调用另一个方法的方法(在 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);

应该适用于您编辑的问题。