Отправить диалоговое окно jQuery UI на

Вы не должны делать это в web.xml, а можете указать каждый запрос на свой фильтр (Patternfilter) и можете проверить URL

package com.inventwheel.filter;

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

/**
 * Servlet Filter implementation class PatternFilter
 */
@WebFilter("/*")
public class PatternFilter implements Filter {

    /**
     * Default constructor. 
     */
    public PatternFilter() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            String servletPath = ((HttpServletRequest)request).getServletPath();
            String requestURI = ((HttpServletRequest)request).getRequestURI();
            Pattern pattern = Pattern.compile(".*"+servletPath+"/(.*)");
            Matcher matcher = pattern.matcher(requestURI);
            if (matcher.matches())
            {
            String param = matcher.group(1);
            // do stuff with param here..
            }

        chain.doFilter(request, response);
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }

}
129
задан CMB 15 May 2009 в 14:09
поделиться

5 ответов

Я не знаю, есть ли опция в виджете jQuery UI , но вы можете просто привязать событие keypress к div, который содержит ваш диалог ...

$('#DialogTag').keypress(function(e) {
    if (e.keyCode == $.ui.keyCode.ENTER) {
          //Close dialog and/or submit here...
    }
});

Это будет выполняться независимо от того, какой элемент находится в фокусе вашего диалога, что может быть или не быть хорошим, в зависимости от того, что вы хотите.

Если вы хотите сделать это функцией по умолчанию , вы можете добавить этот фрагмент кода:

// jqueryui defaults
$.extend($.ui.dialog.prototype.options, { 
    create: function() {
        var $this = $(this);

        // focus first button and bind enter to it
        $this.parent().find('.ui-dialog-buttonpane button:first').focus();
        $this.keypress(function(e) {
            if( e.keyCode == $.ui.keyCode.ENTER ) {
                $this.parent().find('.ui-dialog-buttonpane button:first').click();
                return false;
            }
        });
    } 
});

Вот более подробное изображение того, как это будет выглядеть:

$( "#dialog-form" ).dialog({
  buttons: { … },
  open: function() {
    $("#dialog-form").keypress(function(e) {
      if (e.keyCode == $.ui.keyCode.ENTER) {
        $(this).parent().find("button:eq(0)").trigger("click");
      }
    });
  };
});
150
ответ дан 24 November 2019 в 00:31
поделиться

, если вы знаете селектор элемента кнопки:

$('#dialogBox').dialog('open');
$('#okButton').focus();

Должен помочь вам. Это сфокусирует кнопку ОК, и Enter «щелкнет» по ней, как и следовало ожидать. Это тот же метод, который используется в диалогах собственного пользовательского интерфейса.

0
ответ дан 24 November 2019 в 00:31
поделиться

Я не знаю, как проще, но обычно вы отслеживаете, какая кнопка имеет текущий фокус. Если фокус изменен на другой элемент управления, то «фокус кнопки» останется на кнопке, которая имела фокус последней. Обычно «фокус кнопки» начинается с кнопки по умолчанию. Переход к другой кнопке изменит «фокус кнопки». Вам нужно будет решить, будет ли переход к другому элементу формы снова сбрасывать «фокус кнопки» на кнопку по умолчанию. Вам также, вероятно, понадобится какой-то визуальный индикатор, отличный от установленного по умолчанию в браузере, чтобы указать кнопку в фокусе, поскольку она теряет реальный фокус в окне.

После того, как вы определили и реализовали логику фокусировки кнопки, тогда я бы, вероятно, добавил ключевой обработчик к самому диалогу и заставил бы его вызывать действие, связанное с текущей "сфокусированной" кнопкой.

РЕДАКТИРОВАТЬ : Я предполагаю, что вы хотите иметь возможность нажать Enter в любое время вы заполняете элементы формы, и "текущее" действие кнопки имеет приоритет. Если вы хотите, чтобы такое поведение происходило только тогда, когда кнопка фактически сфокусирована, мой ответ будет слишком сложным.

4
ответ дан 24 November 2019 в 00:31
поделиться

Грубый, но эффективный способ сделать эту работу более общей:

$.fn.dlg = function(options) {
    return this.each(function() {
             $(this).dialog(options);
             $(this).keyup(function(e){
                  if (e.keyCode == 13) {                
                       $('.ui-dialog').find('button:first').trigger('click');
                  }
             });
    });
}

Затем, когда вы создаете новый диалог, вы можете сделать это:

$('#a-dialog').mydlg({...options...})

И использовать его как обычный диалог jquery после этого:

$('#a-dialog').dialog('close')

Есть способы улучшить это, чтобы заставить его работать в более особых случаях. С помощью приведенного выше кода он автоматически выберет первую кнопку в диалоговом окне в качестве кнопки, запускаемой при нажатии клавиши ввода. Также предполагается, что в любой момент времени существует только один активный диалог, что может быть не так. Но вы поняли идею.

Примечание: Как упоминалось выше, кнопка, которая нажимается при вводе, зависит от ваших настроек. Итак, в некоторых случаях вам может понадобиться использовать селектор: first в методе .find, а в других вы можете использовать селектор: last.

6
ответ дан 24 November 2019 в 00:31
поделиться
$('#dialogBox').dialog('open');
$('.ui-dialog-buttonpane > button:last').focus();

Это прекрасно работает с последней версией JQuery UI (1.8.1). Вы также можете использовать :first вместо :last в зависимости от того, какую кнопку вы хотите установить по умолчанию.

Это решение, по сравнению с выбранным выше, имеет преимущество в том, что показывает пользователю, какая кнопка является кнопкой по умолчанию. Пользователь также может перемещаться между кнопками с помощью TAB, а нажатие ENTER приведет к щелчку по кнопке, находящейся в фокусе.

Будьте здоровы.

13
ответ дан 24 November 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: