Обработчик событий не работает с jQuery

-1

Я делаю чат похожим на Facebook или Gmail, но что-то просто не работает. Если у меня открыто 5 разговоров, работает только один, и только один показывает/скрывает. Вы можете увидеть это на live-pin.com. Было бы бесполезно, если бы я вставлял кусок кода, так как все это было связано, мне нужно было вставить весь мой сайт!

Но вот немного кода чата

function getOnJSON(){
    var from;var to;var msg_id;var msg_txt;var new_chat_string;

    //Getting the data from the json file
    $.getJSON("/ajax/end.emu.php",function(data){
    $.each(data.notif, function(i,data){
        from = data.from;to = data.to;msg_id = data.id;msg_txt = data.text;
        if ($("#chat_"+from+"").length === 0){
            $("#boxes").append('<div id="chat_'+from+'" class="chat_box hidden_box">'+
                '<div id="'+from+'_nick" class="chat_nick">'+from+'</div>'+
                '<ul id="'+from+'_txt" class="chat_txt">'+
                    '<li id="'+msg_id+'_txt_msg" class="chat_txt_msg">'+ msg_txt+'</li>'+
                '</ul>'+
                '<form class="new_message" method="POST" id="new_msg_'+from+'">'+
                    '<input type="text" placeholder="Enter your message..." id="'+from+'_input" class="new_input" name="post_text" />'+
                    '<input type="hidden" name="to" value="'+from+'" />'+
                        '</form>'+
                        '</div>');    
            $('#new_msg_'+from).submit(submitChatMsg);
            $('#'+from+'_txt').jScrollPane({stickToBottom: true});
            $('#'+from+'_nick').live("click", function(){ toggleChat('#chat_'+from); });
            // $('#boxes').delegate('.chat_nick', 'click', function() { toggleChat('#chat_'+this.id.replace('_nick', '')); });
            $('body').append('<embed src="http://cdn.live-pin.com/assets/pling.mp3" autostart="true" hidden="true" loop="false">');

        }else{
            var pane2api = $('#'+from+'_txt').data('jsp');
            var originalContent = pane2api.getContentPane().html();
            pane2api.getContentPane().append('<li id="'+msg_id+'_txt_msg" class="chat_txt_msg">'+ msg_txt+'</li>');
            pane2api.reinitialise();
                $('embed').remove();
            $('body').append('<embed src="http://cdn.live-pin.com/assets/pling.mp3" autostart="true" hidden="true" loop="false">');
        }
    });
    });
}

ОБНОВЛЕНИЕ: Исправлена проблема с отображением/скрытием. Теперь главная проблема заключается в том, что только одна из многочисленных форм .new_message является занесены, они используют AJAX для POST сообщения, но только последние созданных произведений. Все они созданы динамически и имеют другой идентификатор.

$('.new_message').live('submit',function(){
    contactForm = $(this);
    valor = $(this + 'input:text').val();
    destinatary = $(this + 'input[type=hidden]').val();
    reponse_id = destinatary + "_input";
    if (!$(this + 'input:text').val()) {
        return false;
    } else {
        $.ajax({
            url: "/ajax/end.emu.php?ajax=true",
            type: contactForm.attr('method'),
            data: contactForm.serialize(),
            // success: submitFinished
            success: function(data){
                responsed = $.trim(data);
                if (responsed != "success") {
                    alert("An error occured while posting your message");
                }else{
                    $('#' + reponse_id).val("");
                }
            }
        });
        return false;
    }

});
  • 1
    Вы не можете просто отладить пошаговый сценарий в Firebug и посмотреть, что происходит / идет не так? Или вы хотите, чтобы кто-то еще сделал это для вас?
  • 0
    Какой обработчик событий? Можете ли вы ограничить это для нас только соответствующим кодом?
Показать ещё 13 комментариев
Теги:
event-handling

1 ответ

0
Лучший ответ
        $('.chatBox').live('click', function(e){ toggleChat($(this)); });
        function toggleChat(obj)
        {
            current_margin = obj.css('bottom');
            if (current_margin == "0px"){
                obj.animate({bottom : "-270px"});
            }
            else
            {
                obj.animate({bottom : "0px"});
            }
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню