0

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

4 回答 4

0

将参数放入对象中,如下所示:

var handler = {
  param1: 'val1',
  param2: 'val2' //ect...
}

handler(handler);

编辑:

改变:

$("#divy").scrollTop($("#"+id).position().top);

到:

$("#divy").scrollTop($("#"+id.param1).position().top);

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

于 2012-06-15T14:38:18.287 回答
0

更新 1

我认为在这种情况下您可以做的是在元素this的上下文中使用关键字。input这最终将在您的实例中执行的是替换idthis. 这也将删除额外的选择。试试这个:

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); 
});
于 2012-06-15T14:38:29.587 回答
0

除非我误解了,否则 if handleris a functionthen 将参数传递给它,就像任何正常情况一样。

function callHandler(handler){
   var passme = "test";
   handler(passme);
}
于 2012-06-15T14:38:47.700 回答
0

您似乎没有将参数传递给callHandler方法中的处理程序 - 相反,您尝试将scroll参数(即var scroll={param1: "25"})作为函数调用。

scroll对配置对象和函数名称使用相同的名称。请使用不同的名称:) 此外,您声明和使用的函数签名不同意。当您尝试传入一个对象时,该scroll函数接受一个字符串。id

于 2012-06-15T14:50:38.383 回答