![](/img/trans.png)
[英]JQuery on('click') call function directly instead of defining it inside the event listener
[英]JQuery event listener call function by name with parameters
我看过与此类似的其他问题,但我似乎无法找到我正在寻找的答案。
有没有办法将参数传递给 JQuery 事件侦听器中的命名函数?
例如,我知道我可以做到这一点
$('#myelement').on("change", function(){
var value = $(this).val();
myFunction(value);
});
但是有什么方法可以将函数名称传递给事件侦听器吗?
像这样的东西
$('#myelement').on("change", myFunction($(this).val()));
老实说,我认为这是直截了当的,但我似乎找不到办法做到这一点。
您可以使用 jQuery .on()方法将参数传递给处理函数。
它的格式是.on( events [, selector ] [, data ], handler )
,其中data
是您需要传递的任何对象。 稍后可以通过处理程序中的event.data
属性访问它。
检查这个例子。 请注意,如果您只想访问$(this).val()
则不需要任何参数: myFunction
已经绑定到目标元素,因此您可以在其中使用$(this).val()
。
$("#i").on("change", null, "My parameter", myFunction); function myFunction(event) { console.log("Parameter: " + event.data); console.log("$(this).val() = " + $(this).val()); }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input id="i"> Enter something and press Enter
您可以使用 jQuery “ on ” 方法,然后调用click
事件侦听器,最后但并非最不重要的是调用您创建的函数。
$('button').on('click', clicked); function clicked() { var val = $('#one').val(); $('.response').html('<p>Value is ' + val + '</p>'); }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <input type="text" id="one"> <button>Click Me</button> <p class="response"></p>
假设我明白你想要什么,我使用的一种解决方法是引用数组中的函数,如下所示
list_of_functions = [function_1,function_2]; function function_1(){ alert("function 1 running"); } function function_2(){ console.dir("function 2 running"); } function run_function(function_index){ return list_of_functions[function_index](); } $("#function_select").on("change",function(){ run_function(this.value); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <select id="function_select"> <option disabled selected>Please select a function</option> <option value="0">function 1</option> <option value="1">function 2</option> </select>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.