2013-03-21 30 views
3

我試圖創建一個簡單的文本塊,當3個表單域中的1個被更改時,該塊更新。jQuery <function>不是函數

這裏是我的jQuery和它不斷收到此錯誤:TypeError: $(...).updateTitlePrefix is not a function

誰能告訴我,我做錯了什麼嗎?

$ = jQuery.noConflict(); 

$(document).ready(function() { 

    $('#dataEntryForm\:studyId').updateTitlePrefix(); 
    $('#dataEntryForm\:formNumberQualifier').updateTitlePrefix(); 
    $('#dataEntryForm\:formVersionNumber').updateTitlePrefix(); 
}); 

// updates the titlePrefix when either the study#, form# or form version are changed  
$.fn.updateTitlePrefix() = function() { 
    $(this).change(function() { 
     $('#dataEntryForm\:titlePrefix').text($('#dataEntryForm\:formNumberQualifier').text() + $('#dataEntryForm\:formVersionNumber').text() + $('#studyId').text()) 
    }); 
} 

不知道這是否是相關的,但我對jQuery的1.3.2,因爲這是一個JSF項目,而這正是包括在RichFaces的庫。

+0

看起來當文檔已經準備就緒時,您正在執行代碼,否則您會看到錯誤*「ReferenceError:賦值時無效的左側」*。 – 2013-03-21 16:59:47

+0

我可能是錯的;但無論哪種方式,我很確定這是一個'方法'... – faino 2013-03-21 16:59:50

+0

只是出於好奇,它可能只是最終的偏好。但是,爲什麼你不把函數作爲基本函數(不是綁定jq函數),然後在文檔就緒時將其綁定到選擇器。這樣做,您可以靈活地重複使用您的功能,或者在您的用戶界面中可能出現的其他事件。簡而言之,你將事件從函數中分離出來。現在看來它緊密結合並且單一目的。 (function(){('yourselectors')。change(function(){yourfunction(this);})); }); – williambq 2013-06-04 18:12:54

回答

14
$.fn.updateTitlePrefix = function() { 

刪除要贏的括號。

$.fn.updateTitlePrefix()是一個函數調用;因爲你只是聲明瞭函數,所以不需要調用/調用該函數。

這是一個常見的功能期望函數參數的問題。例如。

function requriesFn(myFunction) {} 
requiresFn(doStuff()); // incorrect (passes the return value of the function doStuff) 
requiresFn(doStuff); // correct (passes the function itself) 

$.ajax({ 
    error: $.noop() // incorrect 
    error: $.noop // correct 
}); 

// and my biggest pet peeve, 
$(document).ready(function() { 
    myFunction(); 
}); 
// simplify it 
$(document).ready(myFunction); 
// simplify it some more 
$(myFunction); 

從技術上講,有可能需要調用一個函數返回另一個功能,但通常情況並非如此。

+0

+1獲勝:) – Blowsie 2013-03-21 16:59:23

+0

我知道你們中的一個jQuery機器會讓我在幾秒鐘內變直。 – Catfish 2013-03-21 17:00:04