使用jquery数据属性创建函数

时间:2016-09-18 08:16:46

标签: jquery

我正在尝试基于数据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(),但该函数不会运行。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:5)

创建以()结尾的字符串不会导致函数被执行。要像执行Javascript代码一样执行字符串,您需要致电eval()

&#13;
&#13;
$("#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;
&#13;
&#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"); 
}