1

アイテムがクリックされたときに jQuery UI メニューがメニューにフォーカスしないようにするにはどうすればよいですか。

アイテムをクリックするとすぐにアクションが適用され、メニューが閉じる選択メニューがあります。

jQuery UI はクリック時にフォーカス イベントをトリガーしているため ( http://code.jquery.com/ui/1.9.2/jquery-ui.jsの 10956 行目)、Chrome での選択が失われます (Firefox は動作しているようです)。

...
} else if ( !this.element.is( ":focus" ) ) {
    // Redirect focus to the menu
    this.element.trigger( "focus", [ true ] ); // <----- this line
    ...
}
...
4

2 に答える 2

1

実行できる 1 つのアプローチは、実装する必要がある特定のメソッド/プロパティのカスタム値で jquery.ui.menu プロトタイプを拡張することです。$.extend を使用して jquery でこれを行う新しいウィジェットを作成できます。メニュー ウィジェットを拡張してフォーム入力を使用する良い例を次に示します (作成者: Kris Borchers):

  1. デモページはこちら: http://kborchers.github.com/jquery-ui-extensions/menu/inputmenu.html

  2. スクリプトは次のように定義されています。

    //これはコア jquery ui ライブラリです < script src="http://code.jquery.com/ui/jquery-ui-git.js" >< /script > //これは拡張するカスタム入力メニュー ウィジェットですデフォルトのメニュー ウィジェット < script type="text/javascript" src="jquery.ui.menu.inputmenu.js" >

3. デフォルトのメニュー ウィジェットを拡張するために、次のパターンを評価します。

    /*
 * jQuery UI Input Menu Extension
 *
 * Copyright 2010, Kris Borchers
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 * http://github.com/kborchers/jquery-ui-extensions
 */
(function( $ ) {

**var proto = $.ui.menu.prototype,
    originalRefresh = proto.refresh;

$.extend( proto, {**
    refresh: function() {
        originalRefresh.call( this );
        var that = this;
......
...
..
.

ここで github ソースを参照してください: https://github.com/kborchers/jquery-ui-extensions/blob/master/menu/jquery.ui.menu.inputmenu.js

このパターンに従えば、ニーズに合わせてウィジェットをカスタマイズできます。

お役に立てれば。

クリス

于 2013-01-08T00:27:39.963 に答える
0

私のクイックフィックスソリューションは、setTimeout0にしてフォーカスを行うことです。setTimeout がメニューをトリガーして、それ自体にフォーカスを戻すことが判明したため、setTimout の前にフォーカスすると、メニューにフォーカスが戻ります。

setTimeout(function(){
    $('#input-id').focus();
},0);

もう 1 つの簡単な修正方法は、プログラムで任意の場所をクリックすることです。これにより、メニューのフォーカスがキャンセルされ、メニュー自体に戻ります。

    $(document).click();
or
    $('#input-id').click();
于 2013-10-03T04:34:03.980 に答える