3

3つのフォームフィールドの1つが変更されたときに更新される単純なテキストブロックを作成しようとしています。

これが私の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())
    });
}

これが適切かどうかはわかりませんが、これはJSFプロジェクトであり、Richfacesライブラリに含まれているため、jquery1.3.2を使用しています。

4

1 に答える 1

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);

技術的には、の関数を返すために関数を呼び出す必要があるかもしれませんが、通常はそうではありません。

于 2013-03-21T16:58:23.973 に答える