щелкните () для ClassName - PullRequest
       16

щелкните () для ClassName

1 голос
/ 11 февраля 2012

ОБНОВЛЕНИЕ : Комментатор сказал мне изменить некоторые коды, это новый код, и он тоже не работает.

Я создаю чат в стиле Facebook.Он получает последние сообщения «Not Read» из файла JSON и добавляет текст к элементу «UL» через «LI» в поле.Если поле не существует, оно создает и прикрепляет текст.Я хочу, чтобы, когда я щелкаю по этому div, он скрывался с использованием отрицательного поля margin-bottom, а когда я щелкаю по нему снова, он показывает Margin-Bottom: 0.Пожалуйста, помогите мне, так как он просто не работает.

function showChat(id){
$(this).animate({marginBottom : "0"}).removeClass("hidden_box").addClass("active_box").removeAttr('onclick').click(function(){
       hideChat(Id);
    });

}
function hideChat(id){
$(this).animate({marginBottom : "-270px"}).removeClass("active_box").addClass("hidden_box").click(function(){
       showChat(Id);
    });

}

function getOnJSON(){

//Creating Variables that will be used
var from;var to;var msg_id;var msg_txt;

//Getting the data from the json file
$.getJSON("/ajax/chat.json.php",function(data){

//Repeat for each result
$.each(data.notif, function(i,data){

//Getting a var to info
from = data.from;to = data.to;msg_id = data.id;msg_txt = data.text;

//check if div exists
        if ($("#chat_"+from+"_lp").length === 0){

//If not, create the div
            $("#boxes").append('<div id="chat_'+from+'_lp" class="chat_box hidden_box clickable_box"></div>');

//Add the senders name
            $("#chat_"+from+"_lp").append('<div id="'chat_+from+'_nick" class="chat_name">'+from+'</div>');

//Add the chats UL
            $("#chat_"+from+"_lp").append('<ul id="chat_'+from+'_txt" class="chat_txt"></ul>');

//Add the message text
            $("#chat_"+from+"_lp").append('<li id="' + msg_id + '">'+ msg_txt+'</li>');

//Add event handler for each div
            $('#chat_'+from+'_lp').click(function() {showChat(this);});

//If div exists just add the text
        }else{

//Add the message text
            $("#chat_"+from+"_txt").append('<li id="' + msg_id + '">'+ msg_txt+'</li>');

//Add event handler for each document
            $('#chat_'+from+'_lp').click(function() {showChat(this);});

//Close If
        }
//Close data for each item      
    });

//Close JSON
});

//Close Function
}

ОБНОВЛЕНИЕ 2 : чтобы прекратить создавать и добавлять объекты, я создал уникальную HTML-строку, которая будет добавляться.

new_chat_string = '<div id="chat_'+from+'_lp" class="chat_box hidden_box clickable_box"><div id="'chat_+from+'_nick" class="chat_name">'+from+'</div><ul id="chat_'+from+'_txt" class="chat_txt"><li id="' + msg_id + '">'+ msg_txt+'</li></ul></div>';

$("#boxes").append(new_chat_string);    

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

используйте класс вместо id

<div id="chat_sender_lp" class="chat_box hidden_box clickable_box sender-click"

тогда

$('.hidden_box.sender-click').live('click', function(){
   $(this).slideToggle(500);
});
0 голосов
/ 11 февраля 2012

После:

$("#boxes").append('<div id="chat_'+from+'_lp" class="chat_box hidden_box clickable_box" ><div id="name">'+from+'</div><ul id="chat_'+from+'_txt" class="chat_txt"><li id="' + msg_id + '">'+ msg_txt+'</li></ul></div>');

Добавить обработчик событий для вставленного элемента:

$('#chat_'+from+'_lp').click(function() { showChat(this)  })

«this» передает ссылку на DOM себе.

Keep inпомните, что вы добавляете: <div id="name"> каждый раз.Идентификаторы должны быть уникальными.Вместо этого используйте имя класса.

РЕДАКТИРОВАТЬ:

Присоединение к DOM действительно довольно медленно.На самом деле более эффективно создать HTML-код в виде строки и просто вставить его за один раз.Кроме того, вам действительно нужно только прикрепить и ID на элемент обертывания.Все остальное можно извлечь из этого с помощью селектора jQuery.Это поможет вам написать более понятный код.

Вот строка, которую вам нужно добавить:

'<div id="chat_'+msg_id+'" class="chat_box hidden_box clickable_box">
<div class="chat_name">'+from+'</div><ul class="chat_txt"><li>
<a href="javascript://">'+msg_txt+'</a></li></ul></div>'

Если вы хотите выбрать имя чата позже, вы должны использовать: $('chat_1 .chat_name').html()

Также имеет смысл в семантическом смысле подключить ваш обработчик кликов к тегу A.Таким образом, вы будете использовать:

$('#chat_'+msg_id).find('a').click(function() {showChat(this);});

Код намного чище и легче следовать этому пути.Надеюсь, это поможет.

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