0

基本的にはタイトルに質問が書いてありますが、状況はこんな感じです(jsbinなどで再現するのは難しいので、それをしないで解決しようと思います)。

ボタンをクリックすると呼び出される関数があります。クリック イベントは、使用されるフォントを出力に通知します。ただし、特定のページでは、ボタンをクリックするのではなく、body 要素のクラスによってフォントを宣言する必要があります。

私は2つの問題に直面しています。

  1. 引数を渡してパラメーターを受信しようとすると、パラメーターは渡したいものではなく、イベントです。
  2. イベントを最初のパラメーターとして渡し、必要なフォントを 2 番目のパラメーターとして渡すと、フォント変数として未定義になり、関数が機能しません。

このように関数を柔軟にするための助けは、私を大いに助けてくれます。

編集:これは私が持っているものの簡略化されたバージョンです

function fontSelection(font) {

var self = $(this),
  inputOne = $('li:eq(0) input').val(),
  inputTwo = $('li:eq(1) input').val(),
  inputThree = $('li:eq(2) input').val(),
  resultOne = $('div:eq(0)'),
  resultTwo = $('div:eq(1)'),
  resultThree = $('div:eq(2)');
  font = font || $('div.font').attr('title').toLowerCase();

resultOne.removeClass().addClass(inputOne + ' someclass ' + font);
resultTwo.removeClass().addClass(inputTwo + ' someclass ' + font);
resultThree.removeClass().addClass(inputThree + ' someclass ' + font);

}
4

3 に答える 3

2

関数をイベント登録に直接渡すのではなく、目的の引数で関数を呼び出す匿名関数を渡します。

したがって、これではなく:

$("#myButton").click(callMyFunction);

これを使用すると、必要な正確な引数を指定できます。

$("#myButton").click(function(e) {
    callMyFunction(myParam1, myParam2);
});

関数の値を保持したい場合は、次のようthisに使用.call()して、関数で適切に明示的に設定する必要があります。

$("#myButton").click(function(e) {
    fontSelection.call(this, myParam1, myParam2);
});

または、それを引数として渡し、代わりに関数で引数を使用しますthis

$("#myButton").click(function(e) {
    fontSelection(this, myParam1, myParam2);
});
于 2012-11-12T19:42:46.147 に答える
0

サイズについてこれを試してください: 引数が与えられた場合、使用するフォントを設定する関数。引数が設定されていない場合は、フォントの body タグを読み取ります。

于 2012-11-12T19:42:35.820 に答える
0
$(function () {
    if ($('body').hasClass('your class for onload change')) {
        // change font
    } else {
        $('button').click(your_function);
    }
});

編集:

関数で使用し、最初のケースで body を参照し、2 番目のケースで別の dom 要素を参照する場合は、またはthisを使用できます。callapply

$(function () {
    if ($('body').hasClass('your class for onload change')) {
        fontSelection.apply($('body').get(0), [font]);
    } else {
        $('button').click(function () {
            fontSelection.apply(this, [font]);
        });
    }
});
于 2012-11-12T19:50:46.780 に答える