2013-05-06 73 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

相關問題