2

ユーザーがドロップダウンをクリックしてクリックイベントを開始する方法を見つけることができません。ユーザーがドロップダウンをクリックした場合にのみドロップダウンにデータを入力したいのですが、これはまれです。さらに、ページで選択された他のいくつかの値によって異なります。つまり、基本的に、ユーザーがドロップダウンをクリックするだけでオプションが表示された場合に、イベントを発生させるにはどうすればよいですか。

私は試しまし$('select').clickたが、役に立ちませんでした。

オプションがない場合に機能します。しかし、現在の選択肢があれば、運はありません。

4

3 に答える 3

9

focus代わりにイベントを使用してみてくださいselect。そうすれば、キーボードを使用してターゲットに設定されている場合でも、イベントが入力されます。

$('select').on('focus', function() {
    var $this = $(this);
    if ($this.children().length == 1) {
        $this.append('<option value="1">1</option><option value="2">2</option>');
    }
});​

簡単なデモを表示します。

アップデート

これは、unbindを使用してイベントハンドラーを1回だけ起動する新しいバージョンです。このようにして、要素を追加せずにを使用して、前のソリューションで必要とされた条件の結果を変更できます。alertoption

$('select').on('focus', function() {

    var $this = $(this);

    // run your alert here if it´s necessary
    alert('Focused for the first time :)');

    // add the new option elements
    $this.append('<option value="1">1</option><option value="2">2</option>');

    // unbind the event to prevent it from being triggered again
    $this.unbind('focus');
});​

それがあなたが探しているものであることを願っています。

于 2012-11-19T19:55:39.847 に答える
4

動作するはずです。ここで私はそれとその作業を行いました。

$("select").on("click", function() {
    $(this).append("<option>1</option><option>2</option>");
});

更新: http: //jsfiddle.net/paska/bGTug/2/

新しいコード:

var loaded = false;
$("select").on("click", function() {
    if (loaded)
        return;
    $(this).append("<option>1</option><option>2</option>");
    loaded = true;
});
于 2012-11-19T19:50:33.963 に答える
1

クリック後にドロップダウンを自動的に開くには注意が必要です。

// Mousedown is used so IE works
$('#select_id').on('focus mousedown', function (e) {
    var data;
    $(this).off('focus mousedown');
    $.ajax({async: false, 
            type: 'GET', 
            url: 'url that returns the options',
            success: function (d) { data = d; }
           });
    $(this).find('option').remove().end().append(data);
    // Prevent IE hang by waiting awhile
    var t = new Date().getTime(); while(new Date().getTime() < t + 200) {}
    return true;
});
于 2017-02-20T14:16:50.113 に答える