3

プラグインに渡す変数名がありますが、その変数は実際には関数です。jquery $.isFunction を使用して関数であるかどうかを確認し、関数である場合は関数を実行する必要があります。

しかし、私はそれを機能させることができないようです.jsfiddleにいくつかの例を入れました: http://jsfiddle.net/tZ6U9/8/

しかし、ここにサンプルコードがあります:

HTML

<a class="one" href="#">click</a><br />
<a class="two" href="#">click</a><br />
<a class="three" href="#">click</a><br />

JS

$(document).ready(function() {

help = function(var1) {
    alert(var1);
}

function help2(var1) {
    alert(var1);
}


$('a.one').click(function() {
    var functionName = "help";
    if ($.isFunction([functionName])) {[functionName]("hello");
    } else {
        alert("not a function");
    }

    return false;
});

$('a.two').click(function() {
    var functionName = "help";

    if ($.isFunction(functionName)) {
        functionName("hello");
    } else {
        alert("not a function");
    }
    return false;
});

$('a.three').click(function() {
    var functionName = "help2";

    if ($.isFunction(functionName)) {
        functionName("hello");
    } else {
        alert("not a function");
    }
    return false;
});

$('a.four').click(function() {
    var functionName = "help2";

    if ($.isFunction([functionName])) {[functionName]("hello");
    } else {
        alert("not a function");
    }
    return false;
});

});​

ご覧のとおり、私はたくさんのことにうんざりしていましたが、おそらくすべて間違ったものでした... 私はそれらのいくつかにインスピレーションを与えました: jQuery - 関数名として変数を使用

全体的 に、関数と同じ名前の変数を渡しています。jquery を使用して、それが関数であるかどうかを確認します。そうであれば、関数を実行する必要があります。

よろしくお願いします。

4

3 に答える 3

15

名前の文字列で関数を呼び出したい場合は、 を使用してwindowください。

var functionName = "help";
if ($.isFunction(window[functionName])) {
    window[functionName]("hello");
} else {
    alert("not a function");
}
于 2012-09-29T19:26:16.347 に答える
1

実際の例については、 Fiddleを確認してください。

例では、リンクが 1 つしか機能していません。他のリンクも同様に作成します。

編集:最初のコメントの後

HTML

<a class="one" href="#">click</a><br />

JS

var help = function(var1) {
    alert(var1);
}
$(document).ready(function() {
    $('a.one').click(function() {
        var functionName = help;
        if ($.isFunction(functionName)) {
            functionName('test');
        } else {
            alert("not a function");
        }

        return false;
    });
});​
于 2012-09-29T19:27:29.983 に答える
1

以下を使用して、 window/global スコープで定義されている関数 ( function など) を呼び出すことができますhelp

if ($.isFunction(window[functionName])) {
  window[functionName]("hello");
}

help2一方、クロージャーで定義しているため、この方法ではアクセスできません。考えられる解決策は、ハンドラーの外部で関数を定義することです。次に、それを呼び出すために.ready()使用できます。window[functionName]

var namespace = {
  help: function (var1) {
    alert(var1);
  },

  help2: function (var1) {
    alert(var1);
  }
}

$(document).ready(function() {
  var functionName = "help";
  if ($.isFunction(namespace[functionName])) {
    namespace[functionName]("hello");
  }
});

デモ

于 2012-09-29T19:28:52.210 に答える