Несколько функций JQuery? - PullRequest
0 голосов
/ 13 июля 2011

У меня есть чат на моем сайте, который работает на jQuery.Однако проблема в том, что в IE9, когда пользователь нажимает Enter в поле ввода текста, он отправляет дважды.Я предполагаю, что он может думать, что он также должен нажать кнопку?

Любая помощь?

<script>
$('#message').keypress(function(event){
    var keycode = (event.keyCode ? event.keyCode : event.which);
    if(keycode == '13')
    {
        sendPostMessage();
    }
});

$('#sendMessage').click(function(event){
    if(this.disabled == true)
    {
        alert('meh');
    }
    var toSend = $('#message').val();
    if(toSend.length > 1 && toSend.length < 160)
    {
        sendPostMessage();
        //alert('You are sending a message.' + toSend);
    }
    else
    {
        alert('Invalid message.');
        this.disabled = true;
        window.setTimeout(function(){
            $('#sendMessage').removeAttr('disabled');
        }, 3000);
    }
});

jQuery.fn.compare = function(t) {
    if(this.length != t.length)
    {
        return false;
    }

    var a = this.sort(), b = t.sort();
    for(var i = 0; t[i]; i++)
    {
        if(a[i] !== b[i])
        { 
            return false;
        }
    }

    return true;
};

function sendPostMessage()
{
    $.post("http://www.prizetv.org/alpha/ajax.php", { "message": $('#message').val() }, function(data) {
            //alert(data);
            $('#message').val('');
        }
    );
}

var oldMessages;
var temp;
var scroll;

$(document).ready(function() {update();});



function update() { 
    $.getJSON("http://www.prizetv.org/alpha/ajax.php", function(json) {
        $("#actual").empty();

        jQuery.each(json, function(i, val) {
            var test = val[0] + "&nbsp;<b>" + val[1] + "</b>:&nbsp;" + val[2] + "<br />";
            $("#actual").append(test);
        });
        $("#actual").scrollTop(0);
    });

    setTimeout(update, 1000);
}
</script>

Ответы [ 3 ]

1 голос
/ 13 июля 2011

Очистить # сообщение при публикации, а не после успешного ответа. Вы, вероятно, захотите обработать сообщение об ошибке, чтобы сообщение было повторно заполнено.

function sendPostMessage()
{
    var msg = $('#message').val();
    $('#message').val('');
    $.post("http://www.prizetv.org/alpha/ajax.php", { "message": msg}, function(data) {
            //alert(data);
        }
    );
}

Обновление: я пропустил, что вы не препятствовали отправке формы из-за нажатия клавиши ввода в поле ввода. Вы хотите запретить отправку формы с помощью event.preventDefault (), когда пользователь нажимает клавишу ввода.

if(keycode == '13')
{
    sendPostMessage();
    event.preventDefault();
}
1 голос
/ 13 июля 2011

Вызовите e.preventDefault(), чтобы IE не смог обработать сам ключ Enter.

0 голосов
/ 13 июля 2011

Это потому, что ввод вызывает отправку формы, в которой находится ввод, а также любые ваши обработчики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...