Как нажать на кнопку через ярлык с JavaScript, не вызывая перезагрузку страницы - PullRequest
1 голос
/ 18 января 2011

Мне нужно несколько ярлыков в моем веб-приложении, которые будут действовать так же, как когда пользователь нажимает кнопку или нажимает кнопку с клавишей доступа.

Я упростил свой код, чтобы показать вам мою проблему:

<html>
<head><script src="jquery-1.4.2.js" type="text/javascript"></script></head>
<form>
    <body>
        <div id="myDiv">text</div>
        <input name="cmdChangeText" type="submit" value="change text" onclick="document.getElementById('myDiv').innerText='text is changed'; return false;" />

        <input name="cmdTestButton" type="submit" value="hello" onclick="alert('hello'); return false;" accesskey='z' />
    </body>
</form>
<script type="text/javascript">
    document.onkeydown = function() {
        if (event.keyCode == 83) { //83 = 's'
            window.$('[accesskey=z]').click();
        }
    }
</script>
</html>

Первая кнопка изменяет текст.Когда вы нажимаете вторую кнопку или нажимаете ее с помощью клавиши доступа ( Alt + Z в IE), вы получаете предупреждение, но страница не перезагружается: текст все еще изменяется!

Когда я нажимаю какую-то кнопку, S в этом примере, я получаю предупреждение, но страница перезагружается!Почему return false; игнорируется таким образом, и что я могу с этим поделать?

Ответы [ 2 ]

3 голосов
/ 18 января 2011

Я бы избавился от вещей onclick="alert('hello'); return false" и прикрепил бы события, используя jQuery.

После этого вы можете попробовать отменить всплывающее событие:

$('#myInput2').click(
    function() {
        alert('hello')
        return false
    }
 )

Просто догадка.

0 голосов
/ 18 января 2011

Дайте кнопкам разные имена, в этом примере я использовал 'test1' и 'test2' и добавляю следующий код.

$('input[name=test1]').click( function(e){
    e.preventDefault();
    $('#myDiv').innerText('text is changed');
});

$('input[name=test2]').click( function(e){
    e.preventDefault();
    alert('hello');
});

Ввод типа 'отправить' отправит страницу по умолчанию. Использование метода warnDefault () для события, что неудивительно, предотвратит действие по умолчанию. Если вы хотите перезагрузить страницу, просто удалите эту строку.

...