Jquery动态更改函数名称
Jquery dynamically change function name
我们用jquery编写了一些函数。当用户点击每个div时,我们需要动态调用每个函数。
<div class="test" id="test1"></div>
<div class="test" id="test2"></div>
function test1(){
alert('test1');
}
function test2(){
alert('test2');
}
$(".test").on("click",function(){
var function_name=$(this).attr("id");
window[function_name]();
});
但是这个代码不工作,错误是窗口[function_name]不是一个函数。如何解决这个
也请建议另外2、3种方法
你可以简单地使用window,它会工作得很好
function test1(){
alert('You clicked on Test1');
}
function test2(){
alert('You clicked on Test2');
}
$(".test").on("click",function(){
var function_name=$(this).attr("id");
var call_myFun = window[function_name];
call_myFun()
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="test" id="test1">Test 1</div>
<div class="test" id="test2">Test 2</div>
你也可以这样做…
$(".test").on("click",function(){
var function_name=$(this).attr("id");
eval(function_name + "()");
});
function test1(){
alert('clicked on test1');
}
function test2(){
alert('clicked on test2');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="test" id="test1">test1</div>
<div class="test" id="test2">test2</div>
代替
var function_name=$(this).attr("id");
function_name();
使用var function_name=$(this).attr("id");
eval(function_name+"()");
参见示例https://jsfiddle.net/f6z04dfq/
在我看来,处理这个问题的方法是错误的。
如果在div上有id,则可以将适当的函数绑定到所需的事件。
那是解决你问题的简单而有效的办法。
在可读性和可维护性上的优势是巨大的
例如:如果将来有人更改函数的名称,使其id不再匹配,该怎么办?
找到动态调用函数的代码段并不容易。
我的建议是:
function test1() {
console.log("Click on DIV 1");
}
function test2() {
console.log("Click on DIV 2");
}
$(function(){
$('#test1').click(test1);
$('#test2').click(test2);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="test" id="test1">Test 1</div>
<div class="test" id="test2">Test 2</div>
可以使用call方法调用动态函数
window[fun].call();
所以在你的情况下
$(".test").on("click",function(){
var function_name=$(this).attr("id");
window[function_name].call();
});
嗯…您可以为所有div创建摘要函数:JQuery:
function xDiv(e){
var i = $(e).attr("id");
switch (i){
case "test1":
//Call matching function
break;
case "test2":
//Call matching function
break;
case "test3":
break;
/*...*/
default:
break;
}
alert("This call from: " + i );
}
HTML: * * * *
<div id="test1" onclick="xDiv(this);">test1</div>
<div id="test2" onclick="xDiv(this);">test2</div>
<div id="test3" onclick="xDiv(this);">test3</div>
<div id="test4" onclick="xDiv(this);">test4</div>
相关文章:
- 将jquery函数动态应用于添加的元素
- 在剑道网格中,我可以用一个函数动态设置列属性吗
- JQuery将字符串识别为函数动态回调
- 如何将变量与函数动态绑定
- 如何将函数动态附加到对象
- 如何通过函数动态更改文档标题
- 将泛型函数动态关联到对象属性时的作用域.(模块模式)
- 如何使用 javascript 中的替换函数动态替换图片 src
- 如何为每个函数动态绑定“this”
- 为带变量的函数动态添加事件侦听器
- 尝试使用 jQuery - 自定义函数动态验证字段
- 使用 onclick 函数动态添加表行
- 如何使用函数动态定义javascript事件处理程序
- 通过Javascript函数动态创建一个表并向表中添加单元格
- Javascript调用函数-动态变量名
- 使用javascript函数动态更新PayPal货币和金额字段
- 如何使用模型中的函数表达式将函数动态绑定到ng-click
- 你能给函数动态添加局部变量吗
- Javascript使用一个函数动态计算多行
- 如何在选择值作为另一个选择的函数动态加载时不使用ctrl键选择多个值