2016-05-18 15 views
0
$(document).on('click', '#my', myFunc('param')); 

function myFunc(param){ 
    //do something 
} 

このsnytaxは間違っていますか?私はエラーが発生しましたjquery-1.10.2.min.js:3 Uncaught TypeError: ((x.event.special[i.origType] || (intermediate value)).handle || i.handler).apply is not a functionon()を使用して関数にパラメータを渡す

答えて

3

あなたは以下のようにon()ための第3のパラメータとしてデータオブジェクトを送信することができます

$(document).on('click', '#my', {p: 'World'}, myFunc); 

や機能では、あなたは、イベントがあるときevent.dataを使用して、データオブジェクトにアクセスすることができます以下のように起動します。

function myFunc(event) { 
    console.log('Hello, ' + event.data.p); 
} 

Passing data to the handlerの部分を参照してください:http://api.jquery.com/on/#passing-data

+0

うわーはこれを知らなかった! –

1

myFuncを特定のパラメータにバインドするのではなく、関数myFunc( 'param')を呼び出して、そのメソッド呼び出しの結果をバインドしています。あなたがやりたい

一つの方法は、別の関数の内部で、あなたの呼び出しをラップです:

$(document).on('click', '#my', function() { myFunc('param') }); 
0

これは確かに間違っています。 'on'コールバックは、最初のパラメータとしてイベントを受け取ります。現在のフォームでは、myFunc( 'param')は関数ではないため、コードは機能しません(評価の結果です)。

あなたは、単にこのようあなたの内側の機能をラップすることができます

$(document).on('click', '#my', function() { myFunc('param'); }); 

function myFunc(param){ 
    //do something 
} 

いますが、正しくそのハンドラでjqueryのを使用したい場合は、あなたがこれをバインドする必要があります。

$(document).on('click', '#my', function() { myFunc.bind(this)('param'); }); 

    function myFunc(param){ 
     //do something 
    } 

あなたはまた作ることができますあなたの関数は別の関数を返します:

$(document).on('click', '#my', myFunc('param')); 

    function myFunc(param){ 
     return function() { 
     }; 
    } 

ここに完全なフィーダ

function myFunc1(p) { 
 
    return function() { 
 
    $(this)[0].innerHTML = "modified by " + p; 
 
    }; 
 
} 
 

 
function myFunc2(p) { 
 
    $(this)[0].innerHTML = "modified by " + p; 
 
} 
 

 
$(document).on("click", "#one", myFunc1("inner wrapping")); 
 
$(document).on("click", "#two", function() { myFunc2.bind(this)("outer wrapping");});
div { 
 
    width: 300px; 
 
    background-color: yellow; 
 
    text-align: center; 
 
    margin-top: 10px; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="one">one</div> 
 
<div id="two">two</div>

+0

あなたが 'myFunc'を返す理由は何ですか? – Andy

+0

実際にはありません。 –

+1

'$(document).on( 'クリック'、 '#my'、myFunc( 'param'););'は編集できません。 – Andy

関連する問題