2016-03-08 83 views
0

我一直在嘗試做這個好幾個小時,而且它一直沒有工作。我找不到原因。如何讓jquery使用命名函數

我的HTML:

<label> 
Description<br> 
(<span id='fieldLength'>0</span> Chars. ±1): 

<textarea name='dataDescr' id='metaDescr'>Some Text Here.</textarea> 
</label> 

我有什麼說不工作。它不給我任何迴應,在螢火沒有控制檯錯誤或任何形式的反饋:

JQuery的:

counterChecker = function() { 
    var max = 800; 
    var lengthVal = $('#metaDescr').val().length; 
    var fl = $('#fieldLength'); 
    if (lengthVal >= max) { 
     var char = lengthVal - max; 
     fl.text('Over by ' + char); 
    } 
    else { 
     fl.text(lengthVal); 
    } 
} 

$(document).ready(function() { 
    $('#metaDescr').on("change", counterChecker()); 
}); 

編輯:這也不會,如果函數工作在 文件準備好的括號內。

但是DOES的工作是相同的代碼直接插入on change功能匿名函數:

$(document).ready(function() { 

    $('#metaDescr').on("change", function() { 
     var max = 800; 
     var lengthTwo = $(this).val().length; 
     var lf = $('#fieldLength'); 
     if (lengthTwo >= max) { 
      var char = lengthTwo - max; 
      lf.text('Over by ' + char); 
     } 
     else { 
      lf.text(lengthTwo); 
     } 
    }); 
}); 

有人可以幫助我瞭解爲什麼這種差異?

它爲什麼不作爲一個單獨的被調用的函數工作,但沒有給我的螢火蟲任何錯誤,但它可以作爲直接引用(匿名?)函數。我如何使它的行爲像預期的那樣,但將代碼保存在一個獨立的自包含的功能單元中。

我使用jQuery 1.11.3。在過去的幾個小時觀看many計算器posts沒有顯示出光: -/

回答

2

$('#metaDescr').on("change", counterChecker());調用counterChecker功能,並指定返回值的onChange處理。在這種情況下,它返回undefined並將其用作更改偵聽器。你想要的是$('#metaDescr').on("change", counterChecker);,它傳遞給counterChecker函數,當更改事件觸發時將調用該函數。

+0

這是行得通的,謝謝!我不敢相信我幾個小時都在圍繞這一切,而這只是一對空括號。 Grrrr。 – Martin

+0

不要打敗自己,這是一個很難調試的常見錯誤。你會看到它很多關於setTimeout&setInterval。 –

+0

我懷疑它使用了很多PHP,它的功能是通過括號跟着定義的。也沒有括號,我認爲JavaScript/JQuery要求'var'iable – Martin