2013-01-07 83 views
1

如何防止jQuery UI菜單在單擊項目時專注於菜單。防止jQuery UI菜單焦點

我有一個選擇菜單,當一個項目被點擊時它會馬上應用一個動作,然後菜單關閉。

因爲jQuery UI觸發焦點事件點擊(行10956的http://code.jquery.com/ui/1.9.2/jquery-ui.js),它失去了在Chrome中的選擇(Firefox似乎工作)。你可以採取

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

你的HTML和代碼仍然會有所幫助,爲您的菜單和其他任何的代碼是你的代碼 – sajawikio

+0

我沒有嘗試,但什麼$(「.selector」)。菜單({ 重點:函數( ){return false;} }); – wildhaber

+2

無論如何,你可以讓一個jsFiddle的問題,會幫助噸。 http://jsfiddle.net/ – ityler22

回答

1

一種方法是與您需要實施的具體方法/屬性自定義值延長jquery.ui.menu原型。你可以製作一個使用$ .extend在jquery中完成的新小部件。下面是延伸出來的菜單控件有它使用表單輸入(由克里斯Borchers的創作)一個很好的例子:

  1. 演示頁是在這裏: http://kborchers.github.com/jquery-ui-extensions/menu/inputmenu.html

  2. 腳本是這樣定義的;

    //這是核心jQuery用戶界面庫 < SCRIPT SRC = 「http://code.jquery.com/ui/jquery-ui-git.js」> </SCRIPT> //這是延伸默認菜單插件 <腳本類型=「文本/ 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

如果按照這個模式,你可以自定義任何小工具來滿足您的需求。

希望這會有所幫助。

克里斯

0

我速戰速決的解決辦法是setTimeout 0和做好的焦點。 原來setTimeout會觸發菜單將它重新聚焦回自己 因此,如果您在setTimout之前進行對焦,它將會回到菜單;

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

另一種快速的解決辦法是做一個點擊任何地方編程, 將取消菜單的焦點回到本身。

$(document).click(); 
or 
    $('#input-id').click();