2013-05-06 63 views
0

所以我有一个特殊的功能,需要一遍又一遍地重复。所以我认为我只会制作一个可以重复使用的功能。使用选择器作为变量的jquery函数

function validate_form(field,validate) { 
field.focus(function(){ 
    $(validate).css('margin-left','206px'); 
    $(validate).fadeIn(); 
    $(validate).animate({ 
      'marginLeft': '286px' 
      }, 'fast'); 
    name  = $(field).val(); 
    alert(name);   
}); 
} 

打电话我会使用类似

validation_form('#contact_name','#contact_name_validate'); 

所以这里的想法是通过将所需功能的特定选择的功能,但我不能似乎得到它的工作。 当函数中用作变量时,是否有一些特殊的方法可以通过选择器?

回答

5

如果field参数包含你必须把它传递给jQuery()功能选择:

$(field).focus(function(){ 

还要注意的是,你可以让你的功能,通过链接要与$(validate)使用不同的方法更有效:

function validate_form(field, validate) { 
    $(field).focus(function() { 
     $(validate).css('margin-left', '206px') 
        .fadeIn() 
        .animate({'marginLeft': '286px'}, 'fast'); 
     name = this.value; 
     alert(name); 
    }); 
} 

,在您有$(field).val()重点处理程序中的点,你可以使用$(this).val()this.value,而不是$(field).val(),因为this已经是焦点元素,所以你不需要再次选择它$(field)

+0

哦,对了,我遗漏了$ for字段,我也在用错误的名称调用函数:validate_form,而不是validation_form。马虎的工作! – Source 2013-05-06 21:12:33

1

field是包含一个选择的字符串,而不是一个jQuery对象,你需要:

$(field).focus(function(){ 
    /* other stuff in here */ 
}); 

顺便说一句,这个错误应该已经在JavaScript控制台中显示了(它确实对我来说,在铬在至少):

TypeError: Object #contact_name has no method 'focus' 
0

您只需通过jQuery的对象,而不是因为这将缓存jQuery的对象,这样你就不会检索它们不止一次:

var $field = $('#contact_name'); 
var $validate = $('#contact_name_validate'); 

validation_form($field, $validate); 

function validate_form($field, $validate) { 
    $field.focus(function(){ 
     $validate.css('margin-left','206px'); 
     $validate.fadeIn(); 
     $validate.animate({ 
      'marginLeft': '286px' 
     }, 'fast'); 
     name = $field.val(); 

     alert(name);   
    }); 
} 
+0

OP提到这个函数会被一次又一次地重复,大概是每次都有不同的选择器 - 你是否建议每次创建'$ field'和'$ validate'变量? – nnnnnn 2013-05-06 21:11:53

+0

他只能通过选择器本身,而不是在变量中创建它。主要区别/好处是缓存对象。 ''validation_form($('#contact_name'),$('#contact_name_validate'));' – 2013-05-06 21:20:31

+0

或者如果你缓存了_inside_这个函数,那么无论你传递了它的选择器字符串还是jQuery对象,它都会工作。但是对于这个特殊的函数,根本不需要缓存,因为你可以链接'$(validate)'上使用的方法,并使用'this.value'而不是'$(field).val()',然后每个项目只能检索一次。 – nnnnnn 2013-05-06 21:23:56