有没有办法以编程方式将参数传递给onclick函数?

时间:2010-04-26 19:50:02

标签: javascript javascript-events onclick

我有一个执行多项任务的onclick功能。在另一个javascript函数中,我无法访问执行这些任务所需的上下文变量。为了解决这个问题,我一直在直接调用onclick函数。

我现在遇到的问题是,我想在onc​​lick完成Ajax操作后执行任务。有什么办法可以将函数传递给链接的onclick方法吗? onclick属性会是什么样的?

e.g。像这样的东西:

<a id="link3" href="javascript:void(0);" onclick="function(callback) { X(a); Y(b); Z(c, callback); };">click me</a>

单击此按钮会将“undefined”作为回调传递,而我也可以像这样明确地调用它:

document.getElementById("link3").onclick(function() { alert("Completed all tasks"); } );

这样的事情可能吗?基本上我希望能够将一个可选参数传递给onclick方法,但如果它不存在,我希望它的行为就好像onclick中只有过程代码一样。

编辑:添加更多细节

用例是onclick调用需要会话变量的搜索功能。当执行常规搜索时没有问题,但是当我想刷新搜索结果时(例如,当用户编辑或删除其中一个返回的结果时)我需要调用先前调用的相同搜索功能然后打印出来刷新后的反馈消息。这个反馈消息输出是我想要的回调方法。我还想将window.location.href设置为在编辑或插入时向下翻页到受影响的行。

我可以访问服务器端的几个变量,当我渲染页面时,我会直接打印到onclick属性。在我在页面中包含的其他Javascript文件中,我还希望能够执行onclick中包含的相同功能。唯一的问题是我必须通过调用链中的几个中间方法间接地将所有这些变量传递给这些函数。

另一个选项是将这些值打印到隐藏的页面值,然后从我的方法中检索它们,但我想避免这种情况,因为它会使所有内容混乱,以便我可以用一些视觉装饰我的函数调用后遗症。

2 个答案:

答案 0 :(得分:1)

虽然这可能是某种方式,但我建议不要在本机DOM事件中添加参数。

我也看不出真正的架构需求。您能否在需要的情况下提供完整的用例示例?我很确定有人可以提出一个替代解决方案,不需要额外的论证。

在您的示例中,不是将alert放置为Ajax请求的success回调的正确位置吗?

答案 1 :(得分:0)

这对我有用:

<body onload="f = document.getElementById('link3').onclick; f(function(){alert('Completed all tasks')});">
<input id="link3" type="button" onclick="alert(typeof(arguments[0])); arguments[0]()">
</body>

第一个指令返回“function”,第二个指令返回“Completed all tasks”,如预期的那样。在您的情况下,以下应该有效:

<input id="link3" type="button" onclick="X(a); Y(b); Z(c, arguments[0]);">