Предотвратите представление формы с клавишей Enter

Вы могли также обойти вложенные проблемы курсора, общие проблемы курсора и проблемы глобальной переменной путем предотвращения курсоров полностью.

declare @rowid int
declare @rowid2 int
declare @id int
declare @type varchar(10)
declare @rows int
declare @rows2 int
declare @outer table (rowid int identity(1,1), id int, type varchar(100))
declare @inner table (rowid int  identity(1,1), clientid int, whatever int)

insert into @outer (id, type) 
Select id, type from sometable

select @rows = count(1) from @outer
while (@rows > 0)
Begin
    select top 1 @rowid = rowid, @id  = id, @type = type
    from @outer
    insert into @innner (clientid, whatever ) 
    select clientid whatever from contacts where contactid = @id
    select @rows2 = count(1) from @inner
    while (@rows2 > 0)
    Begin
        select top 1 /* stuff you want into some variables */
        /* Other statements you want to execute */
        delete from @inner where rowid = @rowid2
        select @rows2 = count(1) from @inner
    End  
    delete from @outer where rowid = @rowid
    select @rows = count(1) from @outer
End
56
задан Austin Hummel 27 November 2018 в 23:24
поделиться

3 ответа

Вот модифицированная версия моей функции. Он выполняет следующие действия:

  1. Предотвращает работу клавиши ввода. на любом элементе формы другой чем текстовое поле, кнопка, отправить.
  2. Клавиша ввода теперь действует как табуляция.
  3. Вызов метода preventDefault (), stopPropagation () для элемента - это нормально, но вызов в форме, кажется, останавливает событие никогда добраться до элемента.

Так что мой обходной путь - проверить тип элемента, если тип не является текстовым полем (ввод разрешен) или кнопкой / отправкой (ввод = щелчок), то мы просто переходим к следующему пункту.

Вызов .next () для элемента бесполезен, потому что другие элементы могут не быть простыми братьями и сестрами, однако, поскольку DOM в значительной степени гарантирует порядок при выборе, так что все в порядке.

function preventEnterSubmit(e) {
    if (e.which == 13) {
        var $targ = $(e.target);

        if (!$targ.is("textarea") && !$targ.is(":button,:submit")) {
            var focusNext = false;
            $(this).find(":input:visible:not([disabled],[readonly]), a").each(function(){
                if (this === e.target) {
                    focusNext = true;
                }
                else if (focusNext){
                    $(this).focus();
                    return false;
                }
            });

            return false;
        }
    }
}
26
ответ дан 26 November 2019 в 17:15
поделиться

Установить триггер для обеих форм и входы, но когда инициируются входные события, остановите распространение в форму, вызвав метод stopPropagation .

Между прочим, ИМХО, менять поведение по умолчанию на что-либо - не самое лучшее любой средний пользователь привык - вот что их злит при использовании вашей системы. Но если вы настаиваете, тогда вам подойдет метод stopPropagation .

0
ответ дан 26 November 2019 в 17:15
поделиться

Вы можете имитировать нажатие клавиши табуляции вместо ввода на входах следующим образом:

//Press Enter in INPUT moves cursor to next INPUT
$('#form').find('.input').keypress(function(e){
    if ( e.which == 13 ) // Enter key = keycode 13
    {
        $(this).next().focus();  //Use whatever selector necessary to focus the 'next' input
        return false;
    }
});

Вам, очевидно, нужно будет выяснить, какие селекторы необходимы, чтобы сосредоточиться на следующий вводится при нажатии Enter.

52
ответ дан 26 November 2019 в 17:15
поделиться
Другие вопросы по тегам:

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