За последние 24 часа нас посетили 17838 программистов и 1681 робот. Сейчас ищут 883 программиста ...

Проффесионалам! Ajax php JS.

Тема в разделе "JavaScript и AJAX", создана пользователем V2oD2o, 19 янв 2011.

  1. V2oD2o

    V2oD2o Активный пользователь

    С нами с:
    19 янв 2011
    Сообщения:
    23
    Симпатии:
    0
    есть знакомый многим скрипт:

    [js]$(document).ready(function(){

    $(".acc h3").eq(2).addClass("active");

    $(".acc h3").click(function(){
    $(this).next("p").slideToggle("fast").siblings("p:visible").slideUp("fast");
    $(this).toggleClass("active");
    $(this).siblings("h3").removeClass("active");
    });
    });[/js]

    все работает.. пишу админку и вот во что вляпался:

    есть блок id1, вобщем редактирую его, говорю серверу пережувать:

    [js]function WriteOldForm(updateid,formid,subname) {
    var edit1=document.getElementById(formid).value;
    if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest(); }
    xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    document.getElementById(updateid).innerHTML=xmlhttp.responseText;
    alert('Блок успешно обновлен.');
    }
    }
    xmlhttp.open("GET","sql.php?req1="+edit1+"&req2="+subname,true);
    xmlhttp.send();
    }
    [/js]

    он все верно вываливает, НО! после обновления не цепляет скрипт открытия\скрытия блока <p> у <h3>..

    подробнее:

    первый скрипт делает меню "гармошка" на основе:
    <h3>заголовок</h3>
    <p>Текст блока</p>

    меняю в реалтайме на:

    <h3>Велосипед</h3>
    <p>Двухколесный</p>

    все меняется, НО! JS гармошка - больше не работает - блок не открывается..

    второй день сижу, все перепробовал.. я новичек - не ругайтесь :blink:

    з.ы. это нормально когда ajax'ом меняем код, а браузер выдает старый "исходный код" ?

    з.ы.ы. в вызываемом выше sql.php переменная вида $_SESSION['xxx'] не должна работать?
     
  2. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    Видимо есть ошибка в JS коде, или, если я правильно понимаю проблему, то после вставки нового куска кода, его придётся обработать по новой. То-есть старые селекторы jQuery на него на распространяются.
     
  3. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Хренасебе. Еще и входной барьер для тех, кто помогает бесплатно...
     
  4. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Используйте метод jQuery "live"
     
  5. V2oD2o

    V2oD2o Активный пользователь

    С нами с:
    19 янв 2011
    Сообщения:
    23
    Симпатии:
    0
    Kreker - ни в коей мере не хотел нагрубить.. просто пометка от лишних просмотров и "спама"..

    Devzirom - подскажи как мне это сделать? вместе с innerHTML слать jQ скрипт - не пашет..

    MiksIr - если это будет не сложно можно первый скрипт переделать под лайв? я пока не понимаю как "live" работает, не сталкивался еще..

    вот суть проблемы наглядно для копипаста в htm документ:
    [js]<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js'></script>

    <style type="text/css">
    body {
    margin: 10px auto;
    width: 570px;
    font: 75%/120% Arial, Helvetica, sans-serif;
    }
    .accordion {
    width: 480px;
    border-bottom: solid 1px #c4c4c4;
    }
    .accordion h3 {
    background: #e9e7e7;
    padding: 7px 15px;
    margin: 3px;
    cursor: pointer;
    }
    </style>

    <script type="text/javascript">
    $(document).ready(function(){

    $(".accordion h3").addClass("active");
    $(".accordion p").hide();

    $(".accordion h3").click(function(){
    $(this).next("p").slideToggle("slow")
    .siblings("p:visible").slideUp("slow");
    $(this).toggleClass("active");
    $(this).siblings("h3").removeClass("active");
    });

    });

    function updatemenu() { document.getElementById('id1').innerHTML="<h3>Транспорт</h3><p>Велосипед</p>" }

    </script>

    <div class=accordion>
    <div id=id1><h3>Заголовок1</h3><p>Текст1</p></div>
    <div id=id2><h3>Заголовок2</h3><p>Текст2</p></div>
    <div id=id3><h3>Заголовок3</h3><p>Текст3</p></div>
    <div id=id4><h3>Заголовок4</h3><p>Текст4</p></div>
    </div>
    <br><br>
    <a href="javascript:updatemenu();void(0);">Изменить меню</a>[/js]
     
  6. V2oD2o

    V2oD2o Активный пользователь

    С нами с:
    19 янв 2011
    Сообщения:
    23
    Симпатии:
    0
    проблема решена! ТЗ.
    Спасибо всем!