Вы могли также обойти вложенные проблемы курсора, общие проблемы курсора и проблемы глобальной переменной путем предотвращения курсоров полностью.
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
Вот модифицированная версия моей функции. Он выполняет следующие действия:
Так что мой обходной путь - проверить тип элемента, если тип не является текстовым полем (ввод разрешен) или кнопкой / отправкой (ввод = щелчок), то мы просто переходим к следующему пункту.
Вызов .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;
}
}
}
Установить триггер для обеих форм и входы, но когда инициируются входные события, остановите распространение в форму, вызвав метод stopPropagation .
Между прочим, ИМХО, менять поведение по умолчанию на что-либо - не самое лучшее любой средний пользователь привык - вот что их злит при использовании вашей системы. Но если вы настаиваете, тогда вам подойдет метод stopPropagation
.
Вы можете имитировать нажатие клавиши табуляции вместо ввода на входах следующим образом:
//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.