2016-09-18 2 views
1

Ich versuche, eine Funktion in jQuery basierend auf dem Datenattr zu erstellen.Erstellen von Funktion mit jquery Datenattribut

<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"); 
} 

Debugging gibt den Wert von newvalidate als validatename() aber die Funktion nicht ausgeführt. Wie kann ich das schaffen?

+0

Versuchen, 'Fenster [Validate]()' statt Einführung 'newValidate'. –

+0

Was erwarten Sie? Validate + "()"; zu tun, weil ich bezweifle, dass es das ist, was Sie denken, es ist (* es ist nur eine Zeichenfolge *). –

Antwort

3

Das ist, weil es nicht eine Funktion ist, ist newvalidate nur die Zeichenfolge mit dem Wert von "validatename()" und nichts mehr. Um eine globale Funktion ausführen, die Sie den Namen haben als String Sie window[validate]() tun können:

<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"); 
} 
5

Das Erstellen einer Zeichenfolge, die mit () endet, führt nicht dazu, dass die Funktion ausgeführt wird. Um einen String auszuführen, als ob es Javascript-Code ist, müssen Sie eval() nennen:

$("#name").blur(function(){ 
 
    var validate = $(this).attr("data-validate"); 
 
    var newvalidate = validate+"()"; 
 
    eval(newvalidate); 
 
}); 
 

 
function validatename(){ 
 
    alert("success"); 
 
}
<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" />

Sie können auch sehen nur den Namen in der globalen scape, um die Funktion selbst zu bekommen und es nennen.

window[validate]() 
+1

Sie müssen 'eval()' hier nicht verwenden. –

+0

Sie müssen es nicht, aber es ist eine Möglichkeit, es zu tun. – Barmar

+0

Ja, es ist eine Möglichkeit, aber es ist nie eine gute Idee, 'eval' zu verwenden, das Benutzereingaben unterliegt. Vor allem, wenn es nicht notwendig ist und wahrscheinlich langsamer ist. –

Verwandte Themen