2017-12-22 3 views
0

私は複数の方法で呼び出される関数を持っています。イベントにバインドされている人を見つけて、javascriptでifとelse ifを使用するには

function func1(){ 
    if(){    //called by an onclick event 
     alert("!"); 
    }else if(){   //called by another function - 
     alert("?");  //ex) - $(document).ready(function(){ func1()} 
} 

関数が特定のイベントによってバインドされているかどうかを判断する方法はありますか?ifおよびelse if行で使用しますか?助けてください。

+5

関数に渡される引数を見ることができます。クリックハンドラの引数は非常に限定されています。 – Cerbrus

+0

http://api.jquery.com/is/ – Osama

+0

パラメータを追加するだけです: 'function func1(e){...'。関数がイベントを処理している場合、イベントは最初のパラメータとして渡されます。 'if(e)...'で十分です。 –

答えて

0

いくつかのオプションがあります。私は両方の状況に応じて使用します。

1)他の関数からイベントハンドラを分離し、パラメータを使用します。

<button id="button_validate_form">Validate</button> 
<button id="button_submit_form">Sumbit</button> 
const doWork = function doWork(event, context) { 
    if (context === 'event_validate_form') alert('!'); 
    else if (context === 'event_submit_form') alert('?'); 
    else alert('undefined event'); 
}; 
document.querySelector('#button_validate_form').addEventListener('click', event => doWork(event, 'event_validate_form')); 
document.querySelector('#button_submit_form').addEventListener('click', event => doWork(event, 'event_submit_form')); 

2)同じ話ですが、関数にパラメータを追加する代わりに、実際のDOMノードでデータ属性を使用します。

<button id="button_validate_form" data-context="event_validate_form">Validate</button> 
<button id="button_submit_form" data-context="event_validate_form">Sumbit</button> 
const doWork = function doWork(event) { 
    const context = event.target.getAttribute('data-context'); 
    if (context === 'event_validate_form') alert('!'); 
    else if (context === 'event_submit_form') alert('?'); 
    else alert('undefined event'); 
}; 
document.querySelector('#button_validate_form').addEventListener('click', event => doWork(event, 'event_validate_form')); 
document.querySelector('#button_submit_form').addEventListener('click', event => doWork(event, 'event_submit_form')); 
関連する問題