-1

オブジェクト内に、値が jQuery 関数であるプロパティを含むオブジェクトがあります。

var fields = {
    id: {},
    timeStarted: {},
    duration: {},
    status: {},
    name: {
        field: $("#companyName"),
        changeEvent: $("#companyName").on("click", function(){
            alert("bazinga!");
        })
    }
};

内部で見つかったすべての値fieldsを調べて、変更イベントを登録しようとする別の関数もあります。

function registerChangeEvents(){
    $.each(fields, function(field, v){
        $.each(v, function(prop, vv){
            // check which property the loop is on: if changeEvent
            if (prop == "changeEvent"){
                vv();
            }
        });
    });
}

ただし、実行するregisterChangeEvents()と、コンソールが返されますUncaught TypeError: object is not a function。の値changeEventを aでラップできfunction(){...}ます。これにより、正常に実行される関数になります。ただし、何らかの理由で、それは正しいアプローチとは思えません。

何かアイデアがあれば教えてください。

ありがとう。

4

2 に答える 2

2

あなたがこれを持っているとき:

changeEvent: $("#companyName").on("click", function(){
    alert("bazinga!");
})

コードはすぐに実行され、結果は.on()元の選択されたオブジェクトです...これは$("#companyName"). そのため、 「companyName」changeEventを持つ要素を含む jQuery オブジェクトに設定されます。id

を次のように変更nameします。

name: {
    field: "#companyName",
    changeEvent: function(){
        alert("bazinga!");
    }
}

次に、関数を次のように変更します。

function registerChangeEvents(){
    $.each(fields, function(prop, v){
        var field, changeEvent;
        $.each(v, function(propp, vv){
            if (propp === "field") field = vv;
            if (propp === "changeEvent") changeEvent = vv;
        });
        if (field && changeEvent) $(field).on("change", changeEvent);
    });
}

私は1つのことについて混乱しています-あなたはそれを「changeEvent」と呼んでいeventますが、元のコードでは「クリック」用でした。

于 2013-04-25T15:41:20.393 に答える