2013-10-31 31 views
0

點擊複選框,我正在啓動一個自治函數,並行地向同一個函數添加綁定事件(「keyup」),但它是不工作。我也無法發送參數。什麼是正確的方法來處理這個..?jQuery - 我無法將函數綁定到自治函數

這裏是我的功能:

var validateAltName = (function (info) { 
    var altName = $.trim(altInput.value); 
    console.log(altName); //only one time i am getting, not on keyup.. 
    if (!altName) { 
     altInput.select(); 
     return; 
    } 

}()); 
$(altInput).on("keyup", validateAltName); //is there a way to send parameter? 

回答

3

您正在創建一個功能,並立即調用它,因此沒有實際分配到變量validateAltName - 它仍然是不確定的,因爲這是該函數的返回值。

var validateAltName = (function (info) { 
    var altName = $.trim(altInput.value); 
    console.log(altName); //only one time i am getting, not on keyup.. 
    if (!altName) { 
     altInput.select(); 
     return; // return 'undefined', which gets assigned to validateAltName 
    } 
    // if you fall off the end, it also returns 'undefined' 
}()); // this _calls_ the function 

刪除周圍括號和後()

var validateAltName = function (info) { // no opening paren 
    var altName = $.trim(altInput.value); 
    console.log(altName); //only one time i am getting, not on keyup.. 
    if (!altName) { 
     altInput.select(); 
     return; 
    } 

}; // no() parens or closing) 

編輯:如果你想參數發送到這個功能,當事件發生時,您可以包括在處理匿名函數調用它:

// instead of 
$(altInput).on("keyup", validateAltName); //is there a way to send parameter? 
// you can use 
$(altInput).on("keyup", function(e) { 
    // by using .call() instead of direct invocation() you can preserve 'this' 
    validateAltName.call(this, parm1, parm2); 
}); //is there a way to send parameter? 
+0

你是正確的,但即使是KEYUP之前,我期待調用的函數..任何想法傳遞參數..?但感謝您的答案和解釋。 – 3gwebtrain

1

您正在執行您的函數,只是將結果存儲到變量。你的代碼更改爲這個

var validateAltName = function (info) { 
    var altName = $.trim(altInput.value); 
    console.log(altName); //only one time i am getting, not on keyup.. 
    if (!altName) { 
     altInput.select(); 
     return; 
    } 

}; 
0
var validateAltName = function (info) { 
    var altName = $.trim(altInput.value); 
    console.log(altName); //only one time i am getting, not on keyup.. 
    if (!altName) { 
     altInput.select(); 
     return; 
    } 
}; 
$(altInput).on("keyup", validateAltName);