Ich schreibe ein Skript, das Formularfelder validiert. Die Formulareingabe verfügt über ein Datenvalidierungsattribut, das eine CSV mit verschiedenen Funktionen enthält. Ich durchlaufe alle Eingaben, die einen Datenvalidierungswert enthalten, teile diese Werte in ein Array ein und durchlaufe dieses Array, um die entsprechende Funktion aufzurufen. Mein Problem ist, dass window[func]
undefiniert ist - ich bekomme "Kann nicht lesen Eigenschaft '' undefined" Nachricht anwenden. Was mache ich falsch? Hier ist ein jsFiddleWarum ist das Fenster [func] in JS nicht definiert?
<input type="text" name="first_name" data-validate="min_length[4]">
(function($){
var fields = [];
var i = 0;
$('[data-validate]').each(function(){
var rules = $(this).data('validate').split("|");
var label = $(this).parent().find('label').first();
fields[i] = {
name: $(this).attr("name"),
label: label.text(),
rules: rules,
element: $(this)
}
i++;
});
$.each(fields, function(key, field){
field.element.on('focusout', function(){
$.each(field.rules, function(key1, rule){
if(rule.includes("[")){
var rule = rule.match(/(.*?)\[(.*?)\]/);
func = rule[1];
var len = rule[2];
params = [field.element.val(), len];
} else {
func = rule;
params = [field.element.val()];
}
if(callFunc(func, params)){
field.element.addClass('is-valid').removeClass('is-invalid');
} else {
field.element.addClass('is-invalid').removeClass('is-valid');
}
});
});
});
})(jQuery);
function min_length(str, len){
return str.length > len;
}
function callFunc (func, arguments){
window[func].apply(null, Array.prototype.slice.call(arguments, 1));
}
Ihre Fehlermeldung besagt, dass 'Fenster [func]' 'undefined' ist. Nicht, dass ".apply" nicht definiert ist. – Bergi
Was ist 'func'? – Bergi
Sie erhalten 'Fenster [min_length]' dort, das ist keine Sache. Was erwartest du da? – jmargolisvt