2010-12-05 41 views
4

我有幾個Javascript函數看起來都和我很相似。但行爲與我想要的不同。類似的jquery函數不會觸發keyup()不止一次

我希望另一個元素在輸入值被評估時用一些文本更新。然而,對於代碼可重用性,我希望將要更新的元素傳遞給函數,但是當我這樣做時,在文本輸入到輸入框中時,keyup()事件不會觸發。

這是爲什麼?

這是一個工作,但我有這樣指定明確更新的元素。

KEYUP工作

$(function(){ 
    $("#form1").keyup(function(){ 
     var val = $(this).val(); 
     if(val.length < 5){ 
      $("#inputFeedback").html("Less then 5 chars"); 
     }else{ 
      $("#inputFeedback").html("More then 5 Chars!"); 
    } 
}); 

這裏是我想做些什麼,但keyup()事件將不會努力。

KEYUP不工作

var validate = function(feedback){ 
    var val = $(this).val(); 
    if(val.length < 5){ 
     $(feedback).html("Less then 5 chars"); 
    }else{ 
     $(feedback).html("More then 5 Chars!"); 
    } 
} 


$(function(){ 
    $("#form1").keyup(validate($("#inputFeedback"))); 
}); 

注:我也嘗試作爲參數$(this)"#inputfeedback"無濟於事!

我也嘗試過使用古典Javascript function foo(bar){ ... }類型的函數,但是這與上面的最後一個例子具有相同的效果。

我確定這是我在這裏沒有做對或理解的事情,但經過好幾個小時的搜索和閱讀後,我找不到任何東西來幫助我完成這一步!

感謝

+0

+1教給我一個新的語法$(document).ready() – Jere 2010-12-05 13:57:34

回答

1

你絕對不能做回調那樣:

http://docs.jquery.com/How_jQuery_Works#Wrong

+0

謝謝,我以爲它實際上就像是我缺少一個額外的參數,但解釋實際上更有意義。我現在感覺非常愚蠢! – nikomax 2010-12-06 00:15:10

+0

不要太難受。這是在jQuery的教程的第一頁,但是再一次,這是一種反直覺。 – Jere 2010-12-06 00:56:14

0

試着寫這樣說:

var feedback=$("#inputFeedback"); 
$("#form1").keyup(validate(feedback)); 
1
var validate = function(feedback){ 
    var val = $(this).val(); 

    if(val.length < 5){ 
    $(feedback).html("Less then 5 chars"); 
    }else{ 
    $(feedback).html("More then 5 Chars!"); 
    } 
} 


$(function(){ 
    $("#form1").keyup(function(){ 
    validate.call(this, '#inputFeedback'); 
    }); 
}); 

var validate = function(feedback){ 
    return function(){ 
    var val = $(this).val(); 

    if(val.length < 5){ 
     $(feedback).html("Less then 5 chars"); 
    }else{ 
     $(feedback).html("More then 5 Chars!"); 
    } 
    } 
} 


$(function(){ 
    $("#form1").keyup(validate('#inputFeedback')); 
});