我正在尝试基于数据attr在jQuery中创建一个函数。
<input type="text" name="name" id="name" data-validate="validatename" />
$("#name").blur(function(){
var validate = $(this).attr("data-validate");
var newvalidate = validate+"()";
newvalidate;
});
function validatename(){
alert("success");
}
调试将newvalidate
的值赋予validatename()
,但该函数不会运行。我怎样才能做到这一点?
答案 0 :(得分:5)
创建以()
结尾的字符串不会导致函数被执行。要像执行Javascript代码一样执行字符串,您需要致电eval()
:
$("#name").blur(function(){
var validate = $(this).attr("data-validate");
var newvalidate = validate+"()";
eval(newvalidate);
});
function validatename(){
alert("success");
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="name" id="name" data-validate="validatename" />
&#13;
您也可以在全局视图中查找名称以获取函数并调用它。
window[validate]()
答案 1 :(得分:3)
因为它不是一个函数,newvalidate
只是值为"validatename()"
的字符串,仅此而已。要运行名称为字符串的全局函数,可以执行window[validate]()
:
<input type="text" name="name" id="name" data-validate="validatename" />
$("#name").blur(function(){
var validate = $(this).attr("data-validate");
window[validate]();
});
function validatename(){
alert("success");
}