Vovan_2 wrote:
> Подскажите, пожалуйста, как корректно написать такой код. Нужно, чтобы > по нажатию Enter нажималась кнопка OK:
Не делай так, очень бесят сайты, когда невозможно autocomplete использовать клавиатурный.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Vovan_2 wrote:
> Не нужен там автокомплит. Даже хорошо, если не будет работать.
При нажатии enter сабмитится форма сама по себе, без скриптов. Вроде это везде работает. Правда некоторые браузеры сабмитят первую кнопку, некоторые — нет (IE как раз вроде).
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ., Вы писали:
.>При нажатии enter сабмитится форма сама по себе, без скриптов. Вроде это везде работает. Правда некоторые браузеры сабмитят первую кнопку, некоторые — нет (IE как раз вроде).
Ну сабмитится. Я разве говорю, что нет? :)
Но в запрос при этом не добавляется buttonName=value, а надо, чтобы добавлялось...
Здравствуйте, Роман Дубров, Вы писали:
РД>кривой подход и никакой полезной информации не несет... факт сабмита РД>формы известен и без этого
Охохохо...
Ну почему бы просто не подсказать (если знаете, конечно)?
Это вам не несёт, а веб-серверу несёт! Не запускается обработчик кнопки, если не прислать ему это явно. В код обработчика я вмешиваться не могу, а поправить страницу — в моих силах. Так что, решит кто-нибудь задачу?
Насколько я понимаю, при нажатии на Enter выполнение сабмита как бы ставится в очередь. Поэтому да, ваш обработчик запускается, но тот факт, что он нажимает на кнопку не отметяет запланированного ранее сабмита, который был вызван отнюдь не кнопкой. Что-то подобное у меня было, но давненько. Идея была в том, чтобы сразу после загрузки страницы переопределить обработчик сабмита для формы, а старый запомнить, например в expando-свойстве. В новом обработчике проверяется флажок, который устанавливается обработчиком нажатия Enter. Если флажок выставлен, то отменяете сабмит возвращая false. Но перед возвратом восстанавливаете старый обработчик для формы. Если флажок не выставлен, то прямо передаёте управление запомненному обработчику.
SAS>Насколько я понимаю, при нажатии на Enter выполнение сабмита как бы ставится в очередь. Поэтому да, ваш обработчик запускается, но тот факт, что он нажимает на кнопку не отметяет запланированного ранее сабмита, который был вызван отнюдь не кнопкой. Что-то подобное у меня было, но давненько. Идея была в том, чтобы сразу после загрузки страницы переопределить обработчик сабмита для формы, а старый запомнить, например в expando-свойстве. В новом обработчике проверяется флажок, который устанавливается обработчиком нажатия Enter. Если флажок выставлен, то отменяете сабмит возвращая false. Но перед возвратом восстанавливаете старый обработчик для формы. Если флажок не выставлен, то прямо передаёте управление запомненному обработчику.
Чуть не забыл. Работать оно будет только тогда, когда флажок выставляется в коде, предшествующем этому как бы поставленному в очередь сабмиту. Если после выставления флажка не затребовать новый сабмит явно, например программным нажатием на кнопку, то работать не будет.
К сожалению, я не знаю где в документации описано такое поведение в ответ на нажатие Enter. Так что это все только из экспериментов следует. Если кто знает, поделитесь ссылкой.
Vovan_2 wrote:
> Ну почему бы просто не подсказать (если знаете, конечно)? > Это вам не несёт, а веб-серверу несёт! Не запускается обработчик кнопки, > если не прислать ему это явно. В код обработчика я вмешиваться не могу, > а поправить страницу — в моих силах. Так что, решит кто-нибудь задачу?
Нужно менять обработчик формы. В таких условиях задача не разрешима. Ну можешь добавить <input type="hidden" name="b" value="OK"/>. Только это всё извратъ.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Нажать кнопку в JavaScript
От:
Аноним
Дата:
17.04.09 10:39
Оценка:
Здравствуйте, Vovan_2, Вы писали:
V_>Подскажите, пожалуйста, как корректно написать такой код. Нужно, чтобы по нажатию Enter нажималась кнопка OK:
Попробуй
function PressFindButton(event)
{
if (event.keyCode == 13)
{
event.cancelBubble = true;
event.returnValue = false;
document.f.b.click();
}
}
Здравствуйте, SergASh, Вы писали:
SAS>Здравствуйте, Vovan_2, Вы писали:
SAS>Насколько я понимаю, при нажатии на Enter выполнение сабмита как бы ставится в очередь. Поэтому да, ваш обработчик запускается, но тот факт, что он нажимает на кнопку не отметяет запланированного ранее сабмита, который был вызван отнюдь не кнопкой.
Почему же тогда:
1. Работает в IE, если открыть файл с диска?
2. Прекрасно работает в FireFox?
Я так понимаю, что всё же обработчик запускается раньше, чем сабмит...
когда мне такое надо было, я именно так и делал.
попробовал твой код.
ФФ 3.0.8, ИЕ 6.0.2900.2180.xpsp_sp2_rtm.040803-2158 — полет нормальный, при чем неважно где лежит файл локально или на серваке.
Здравствуйте, Muxa, Вы писали:
M>когда мне такое надо было, я именно так и делал. M>попробовал твой код. M>ФФ 3.0.8, ИЕ 6.0.2900.2180.xpsp_sp2_rtm.040803-2158 — полет нормальный, при чем неважно где лежит файл локально или на серваке.
Ну не работает в IE, чесслово! Только что проверил в твоей же версии, вплоть до последних циферок. И в IE 7 не работает. А в ФФ – да, работает бес проблем, я так и говорил...
Причём, что странно. Если я после click() добавлю alert("!")
function PressFindButton(event)
{
if (event.keyCode == 13)
{
document.f.b.click();
alert("!");
}
}
то всё работает (с сообщением, конечно). Комментирую:
function PressFindButton(event)
{
if (event.keyCode == 13)
{
document.f.b.click();
//alert("!");
}
}
и перестаёт работать! Бред какой-то, ничего не понимаю...
Ещё один интересный момент: когда открываешь с диска, то сверху в браузере появляется строка, информирующая о том, что некоторое содержимое заблокировано. Пока не разрешишь заблокированное содержимое, не работает click(). Как только отключишь – начинает работать. Когда открываешь с сервера, жёлтая строка не появляется – просто не работает и всё.