var abc = '5';
$('#test').click(meraFunc(abc));
function meraFunc(abc)
{
alert(abc);
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="button" id="test" value="testMe">
&#13;
当我加载页面时,会弹出警告,显示&#39; 5&#39; [我还没有点击按钮]。当我点击按钮时,没有任何反应。这是在jQuery中传递参数的正确方法吗?
答案 0 :(得分:9)
问题在于这一行:
j('#test').click(meraFunc(abc));
你正在调用 meraFunc,然后将它返回的任何内容(未定义)传递给.click()
函数。这就是警报立即弹出的原因。
您需要将函数引用传递给.click()
,如下所示:
j('#test').click(meraFunc); // no parens after meraFunc
但是如何传递参数?将呼叫包含在另一个功能中,如下所示:
j('#test').click(function() {
meraFunc(abc);
});
请注意,我添加的匿名函数之后也没有()
个parens,因此不会立即调用它。然后,当发生实际点击事件时,将调用匿名函数,然后它将使用meraFunc(abc)
参数调用您的函数。
答案 1 :(得分:7)
使用匿名函数(jsfiddle demo)包装它:
j('#test').click(function() {
meraFunc(abc);
});
答案 2 :(得分:0)
@ Umesh251:我知道您从@heikkim获得了有效的解决方案,但只想解释现有代码的异常行为。
$('#test').click(meraFunc(abc));
您在页面加载时收到警报,因为您没有将点击事件绑定到#test
。这就是为什么手动点击测试按钮时没有警报的原因。
答案 3 :(得分:-1)
Var abc= 5;
$('#test').click(function());
function meraFunc(abc)
{
alert(abc);
}
享受
答案 4 :(得分:-1)
将meraFunc包装在匿名函数中。
var abc = '5';
$('#test').click(function(){
meraFunc(abc)
});
function meraFunc(abc)
{
alert(abc);
}