0

クリックイベントまたは直接呼び出すことができる関数があります。直接呼び出すときは、データ パラメーターを渡す必要があるため、パラメーターを使用した直接呼び出しを考慮して、パラメーターを受け入れる関数を定義しました。

function myFunc(param){

}

関数内で、関数が直接呼び出されたのか、クリック イベントから呼び出されたのかを区別する必要があるため、param が設定されているかどうかを簡単に確認できると考えました。設定されている場合、関数は直接呼び出されます。設定されていない場合は、クリック イベントから呼び出されます。

問題は、クリック イベントがデフォルトでイベント オブジェクトを渡すことです。そのため、関数がクリック イベントによって呼び出された場合でも、param は null になりません。

渡されたパラメータがクリックイベントかどうかを確認する方法はありますか?

4

5 に答える 5

2

コードを複製する必要はありません。これを行う適切な方法は、クリックイベントをイベントハンドラーで処理し、別の関数で実行するアクションを処理することです。例えば:

// define main action
var doSomethingUseful = function(is_clicked) {
  // write some code here
}

// define click handler
var myBtnClicked = function(e) {
  doSomethingUseful(true);
}

// bind click event
$('#my_button').click(myBtnClicked);

すでに述べたように、情報を知る必要があるという事実は、通常、物事を行うためのより簡単な方法があるかもしれないという警告サインです。

たとえば、編集します。

// define main action
var doSomethingUseful = function() {
  // write some code here that doesn't care "why" it's being called
}

// define click handler
var myBtnClicked = function(e) {
  // do the click-only stuff

  // call the generic function
  doSomethingUseful();
}

// bind click event
$('#my_button').click(myBtnClicked);
于 2012-06-02T03:54:50.253 に答える
1

バージョン 9 より前の IE は常にイベント引数を渡すとは限らないため、IE クリックから呼び出された場合、パラメーターは未定義になります。

function myFunc(param){
if(!param) || param.clientX)// not called with a data param
}

イベントよりもデータを確認する方がよいでしょう。

于 2012-06-02T04:19:28.683 に答える
0
jQuery(document).ready(function(){
    $('#someID').click(function(){ 
        myFunc(true);
    });
    myFunc();
});

function myFunc(param){
    param ? alert("click"):alert("not click");
}
于 2012-06-02T04:36:18.637 に答える
0

クリックイベントに渡される.clientXプロパティを確認します。

  function(param){

   if(param.clientX){//this is a click event}
    else
    {//this is a call event};

};

これを使用することをお勧めします。

   function(param){

       if(param.target){//this is a click event}
        else
        {//this is a call event};

    };
于 2012-06-02T03:47:14.640 に答える
0
function myFunc(param) {

    // which (aka keyCode) is a property set to params
    // by jQuery for any event


    // Check for object make you free to pass parameter 
    // as object also with string, array and so on

    if (Object.prototype.toString(param) == '[object Object]' && param.which) {
        // called by clck
        console.log(param.which);
    } else {
        // called by function
        console.log(param);
    }
}

$('#clickable').click(myFunc)

// passing parameter as object
myFunc({
    a: 'abc',
    b: 'def'
});​

// passing parameter as string
myFunc('Hello');

// passing parameter as array
myFunc([1, 2, 2]);

等々。

デモ

于 2012-06-02T04:52:05.453 に答える