4

onchangeのイベントを理解しようとしていbootstrap-multiselectます。特に、関数の構文とパラメーターを理解しようとしています。

$('#example-onChange').multiselect({
     onChange: function(option, checked, select) {
            alert('Changed option ' + $(option).val() + '.');
           }
});

関数内の 3 つのパラメーターの意味を知るには? これら 3 つのパラメーターはどこで取得できますか? コードhttps://github.com/davidstutz/bootstrap-multiselect/blob/master/dist/js/bootstrap-multiselect.js#L263も調べてみましたが、あまり意味がありませんでした。

この関数オプションでは、選択されたオプションを参照し、checkedオプションがcheckedまたはであったかどうかを示すアラートを使用することを知っていますuncheckedundefined関数内で実行しているときに取得し続けるconsole.log(select)ので、それが何を意味するのかわかりません。

質問: このような関数のパラメーターと構文を理解するにはどうすればよいですか? これは単なる例ですが、一般的な手順を知っていると、将来他の同様の機能を解読するのに役立ちます。

4

2 に答える 2

3

要するに、ライブラリは実際にはselectオプションを提供していないようです。


一般に、ドキュメンテーションがあまり正確ではない状況では、私がよく適用する手法は、 に適用しconsole.logargumentsそれぞれがどのように見えるかを調べることです。

この状況では、次のことを行います。

$('#example-onChange').multiselect({
    onChange: function(option, checked, select) {
        console.log(arguments);
    }
});

... 次の出力が得られました。

ここに画像の説明を入力

...これから、2 つの引数が提供されていることがわかります。1 つ目は、クリックされたオプションの jQuery オブジェクトです。2 番目 (推測できます) は、オプションが選択されているかどうかに関するブール値です。

select(3 番目の引数) が指定されていないこともわかります。


実行できる別のアプローチは、あなたが行ったようにソース コードを検索することです。ただし、関数が定義された場所ではなく、関数が呼び出された場所を見つけることをお勧めします。ソース コードonChangeでを検索すると、 が少なくとも 3 回呼び出されていることがわかります。onChange

  1. this.options.onChange($option, checked);
  2. this.options.onChange($option, true);
  3. this.options.onChange($option, false);

... どれも 3 番目の引数を提供しません。開発者はあらゆる種類の奇妙で素晴らしい方法でそれらをマスクできるため、すべての呼び出しサイトを見つけるのが難しい場合があるため (特に大規模なライブラリでは)、ここで少なくとも 3 回言います。


使用できるその他のテクニック:

  1. ハンドラー関数内にブレークポイントを設定し (開発ツールの「ブレークポイント」機能を使用するか、debuggerステートメントを介して)、ハンドラーをトリガーし、コールスタックをたどって (再び開発者ツールを使用して) 呼び出しサイトを調べ、どの変数が提供されているかを確認してください。

  2. それぞれの GitHub プロジェクトの問題を開きます。多くのライブラリ所有者が喜んでお手伝いします。

于 2015-06-29T09:54:33.950 に答える
1

残念ながら、すべての Javascript ライブラリには非常に堅牢なドキュメントが必要です。

さらに、Javascript は動的に型付けされる言語であるため、仮パラメーターに必要な型に関する情報はありません。適切なドキュメントがないと、ライブラリを理解するのが難しくなります。

迅速に理解するために、経験を積んで、使用できる思考メカニズムがいくつかあります。たとえば、イベントのデリゲートのパラメーターは、イベントが発生する要素に関する情報を提供します。これらのパラメーターは、返される値のようです。

あなたの例では、オプション、チェック、および選択が、変更された #example-onChange で定義された複数選択のオプションの要素 (onChange) に関係している可能性があります。

例 1 :

onClose:function(success)
{
    //TODO
}

この場合、「成功」は次のことを意味する必要があります。要素のクローズが成功した場合、このパラメーターは true であり、それ以外の場合は「成功」は false です。

例 2 :

afterSave:関数(成功、ファイル名) {

}

この場合、「filename」は、保存アクションの実行後に保存された要素のファイル名である必要があります。

私は正しい英語を書くために最善を尽くしています。それが理解できることを願っています。

于 2015-06-29T10:05:17.310 に答える