JavaScript Изменить кнопку по умолчанию с помощью firefox

следующая проблема:

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

Теперь у меня проблема: когда пользователь нажимает ввод в текстовом поле, вместо кнопки добавления будет вызываться первая кнопка списка. Поэтому я добавил JavaScript в событие «onkeydown» кнопки, где я использую «return false;» чтобы избежать того, что первая кнопка будет вызвана после того, как я проверил, что кнопка возврата была нажата. Это отлично работает со следующей строкой: onkeydown="if (event.that == 13) { return false; }" Но как только я добавлю какой-либо код JavaScript перед "return false;" (Мне нужно подтверждающее сообщение и некоторые другие процедуры JavaScript), браузер firefox действительно вызывает первую кнопку И код javascript в событии onkeydown... Такое поведение, похоже, не происходит в Internet Explorer.

Я часами пытался найти решение, но не могу его найти, а также не могу найти подсказку в Интернете. Так что я был бы очень рад, если бы кто-то мог помочь мне в этой проблеме?

Я попытался создать пример кода, где каждый может воспроизвести неправильное поведение. В последнем элементе управления вводом я добавил событие onkeydown. Может ли кто-нибудь сказать мне, почему Firefox отображает сообщение подтверждения первой кнопки, когда я нажимаю кнопку «Ввод» в поле ввода текста?

<html>
<head>
</head>
<body>
    <form method="post" action="Test.html" id="ctl00">
    <div id="divTest">
        <table>
            <tr>
                <td>
                    Testline 1
                </td>
                <td>
                    <input type="submit" onclick="if (confirm('Sure?')) alert('the wrong postback'); else return false;" value="Test1" />
                </td>
            </tr>
            <tr>
                <td>
                    Testline 2
                </td>
                <td>
                    <input type="submit" onclick="if (confirm('Sure?')) alert('the wrong postback'); else return false;" value="Test2" />
                </td>
            </tr>
        </table>
    </div>
    <table>
        <tr>
            <td>
                Enter name:
            </td>
            <td>
                <input type="text" size="30" onkeydown="if (event.which == 13) { alert('test'); return false; }" />
            </td>
            <td>
                <input type="submit" title="Add it" onclick="alert('the correct postback')" />
            </td>
        </tr>
    </table>
    </form>
</body>


person user2294634    schedule 18.04.2013    source источник


Ответы (1)


Заменить везде

type="submit"

с

type="button"

так что нажатие «ввода» не отправит форму.

Но вся схема странная: ты хочешь отправить форму или нет? Если да, то почему бы не иметь (как обычно) только одну функцию, проверяющую все поля?

person Denys Séguret    schedule 18.04.2013
comment
Да, я хочу отправить форму, потому что у меня есть сетка с кнопкой удаления справа, и там мне нужна обратная передача, потому что я использую ASP.Net, где я хочу, чтобы событие было поднято. - person user2294634; 20.04.2013
comment
Другая кнопка «Добавить» (в моем приложении добавить адрес электронной почты) находится под сеткой (сетка находится внутри панели), где у меня есть строка для добавления новой записи в сетку, и я хочу, чтобы кнопка «Добавить» использовалась по умолчанию. для поля ввода текста, где можно ввести новое имя. Но спасибо за совет с type=button .. может быть, это может дать мне подсказку .. но в любом случае: я думаю, что на данный момент у меня есть решение, используя событие onkeypress вместо onkeydown .. это, кажется, работает лучше .. не с все ситуации, но лучше :) - person user2294634; 20.04.2013