我创建了一个包含以下内容的javascript文件:
(function ($) {
//Define a Drupal behaviour with a custom name
Drupal.behaviors.jarrowDynamicTextfieldValidator = {
attach: function (context) {
//Add an eventlistener to the document reacting on the
//'clientsideValidationAddCustomRules' event.
$(document).bind('clientsideValidationAddCustomRules', function(event){
//Add your custom method with the 'addMethod' function of jQuery.validator
//http://docs.jquery.com/Plugins/Validation/Validator/addMethod#namemethodmessage
jQuery.validator.addMethod("typeValidator", function(value, element, param) {
...bunch of code here...
}, jQuery.format('Field can not be empty'));
});
}
};
})(jQuery);
我想要做的是在选择框中添加一个更改侦听器,以便在选择更改时调用此验证函数。我不确定我是否可以这样做,因为验证代码被隐藏在几个函数中。这可能吗?
答案 0 :(得分:1)
您的原始代码显示它的方式,不,您将无法调用任何这些函数,因为它们是anonymous
并且在父级的范围内功能
如果要为调用它的函数之外的函数声明一个变量,那么你将能够重用该函数,因为它将全局到该范围其他功能。注意:如果您希望变量完全是全局变量,或者更确切地说,无论您在代码中的哪个位置都可以访问它,只需不要在变量前面写var
,它就会“ global“,实际上相当于将变量放在window
命名空间中。
以下是使用您的代码的示例:
(function ($) {
var customCallback = function(event){
//Add your custom method with the 'addMethod' function of jQuery.validator
//http://docs.jquery.com/Plugins/Validation/Validator/addMethod#namemethodmessage
jQuery.validator.addMethod("typeValidator", function(value, element, param) {
...bunch of code here...
}, jQuery.format('Field can not be empty'));
};
//Define a Drupal behaviour with a custom name
Drupal.behaviors.jarrowDynamicTextfieldValidator = {
attach: function (context) {
//Add an eventlistener to the document reacting on the
//'clientsideValidationAddCustomRules' event.
$(document).bind('clientsideValidationAddCustomRules', customCallback);
}
};
//now you can use that function again...
$('#something').on('someEvent', customCallback );
})(jQuery);
请注意,您必须对该功能进行一些调整,以确保所有变量都可用,以及由于范围可变而导致的变量。因此,这可能需要进行一些调整才能使其适用于您的场景。
答案 1 :(得分:1)
通常你不能在不修改代码的情况下调用那个匿名函数,但这似乎是为jQuery Validation Plugin注册自定义验证规则的方式,一旦注册,你绝对可以使用该自定义规则通过插件的API。
例如,以下代码添加了自定义规则:
jQuery.validator.addMethod("typeValidator", function(value, element, param) {
...bunch of code here...
}, jQuery.format('Field can not be empty'));
现在,您可以在表单上初始化插件并调用valid
函数来验证表单。
$('#someForm').validate({
rules: {
someField: {
typeValidator: true //use the custom validation rule
}
}
});
现在,您可以使用$('#someForm').valid()
检查表单是否有效。
有关更多信息,请查看plugin's API。