Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает javascript в документе, вызванным AJAX. (https://javascript.ru/forum/misc/28644-ne-rabotaet-javascript-v-dokumente-vyzvannym-ajax.html)

Hauster 27.05.2012 22:09

Не работает javascript в документе, вызванным AJAX.
 
Собственно, сабж.
Вызываю документ:
$(document).ready(function(){
  $('#butnews').click(function(){
  $.post(
  "/newsbox.php",
  writebox
  );});
});

function writebox(data){
document.getElementById('newsbox').innerHTML = data;
}


Появляется документ, вида:

<button onclick="opana()">Обновить</button><br>
<script>
function opana(){
    alert('123');
}
</script>

При нажатии на кнопку, ничего не происходит. В чём ошибка?

vadim5june 27.05.2012 22:31

так попробуйте
function writebox(data){
$('newsbox').html(data)
}

Hauster 27.05.2012 22:34

а так у меня перестаёт записываться документ.

Deff 27.05.2012 22:37

Hauster,
<button id=butAJaks onclick="opana()">Обновить</button><br>
<script>
$("#butAJaks").live("click", function(){
  alert("Oppana");
  alert('123')
});
</script>

melky 27.05.2012 22:43

Цитата:

Сообщение от Hauster
При нажатии на кнопку, ничего не происходит. В чём ошибка?

в том, что jQuery (или xmlhttprequest, не помню) вырезает скрипты из ответа AJAX

Deff 27.05.2012 22:48

melky,
Да нет - тут суть в привязках событий, трабла обычно нет если бы скрипт обработки подгружался вместе с кнопкой и чуть впереди по контенту

Hauster 27.05.2012 22:51

Вот страница:
<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.js"></script>
    </head>
    <body>
        <button id="button">Жми!</button>
        <div id="text">non</div>
                <script>
                $('#button').click(function(){
                    $.post(
                    "./123.html",
                    writebox
                    );});
            function writebox(data){
                document.getElementById('text').innerHTML = data;
            }
        </script>
    </body>
</html>


Вот страница 123:
<div id="butAjaks">123</div>
<script>
$("#butAJaks").live("click", function(){
 alert("Oppana");
});
</script>

Google Chrome ошибок не выдаёт.
Если поставить скрипт выше, ничего не произойдет.

melky 27.05.2012 22:52

Цитата:

Сообщение от Deff
melky,
Да нет - тут суть в привязках событий, трабла обычно нет если бы скрипт обработки подгружался вместе с кнопкой и чуть впереди по контенту

да ну ?

<button onclick="opa()">?!</button>
<script>
function opa() { alert("!!!!!!"); }
</script>


Hauster, читайте мой пост.

Hauster 27.05.2012 22:53

Цитата:

Сообщение от melky (Сообщение 177039)
да ну ?

<button onclick="opa()">?!</button>
<script>
function opa() { alert("!!!!!!"); }
</script>

Извините, но:

Скрипты существуют в Google Chrome, но они не работают.

И как быть в таком случае?

melky 27.05.2012 23:00

Цитата:

Сообщение от Hauster
Скрипты существуют в Google Chrome, но они не работают.
И как быть в таком случае?

мой пример не работает в Chrome?

а если просто в файл, откуда загружается html, поставить тег script с alert, то он вылетает?

попробуйте добавить в options параметр dataType со значением "html"
source

Deff 27.05.2012 23:05

Hauster,
Поставьте мою версию - она анализирует событие как оно происходит..

Ы...

vadim5june 27.05.2012 23:06

Цитата:

Сообщение от Hauster (Сообщение 177024)
а так у меня перестаёт записываться документ.

то есть алерт работает-а что то нарушается-это странно

Hauster 27.05.2012 23:09

Цитата:

Сообщение от Deff (Сообщение 177046)
Hauster,
Поставьте мою версию - она анализирует событие как оно происходит..

Ы...

Ваша версия не работает.

Цитата:

Сообщение от vadim5june (Сообщение 177047)
то есть алерт работает-а что то нарушается-это странно

Именно, как-будто его вырезают, как и сказал здесь кто-то.

И нет, при загрузке 123 ничего не происходит.

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.js"></script>
    </head>
    <body>
        <button id="button">Жми!</button>
        <div id="text">non</div>
        <script>
                $('#button').click(function(){
                $.ajax({
                type: "POST",
                url: "./123.html",
                dataType: "html",
                success: writebox
                });
            });
            function writebox(data){
                document.getElementById('text').innerHTML = data;
            }
        </script>
    </body>
</html>


123
<script>
alert(123);
</script>



Соответственно:

$('#button').click(function(){
                $.ajax({
                type: "POST",
                url: "./123.html",
                dataType: "script",
                success: writebox
                });
            });
            function writebox(data){
                document.getElementById('text').innerHTML = data;
            }


Так выводит алерт: 123.

Если в файле только код JS:

alert(123);

Deff 27.05.2012 23:16

Hauster, A так ?
<button id=butAJaks onclick="opana()">Обновить</button><br>
<script>
$(document).ready(function(){
 $("#butAJaks").live("click", function(){
  alert("Oppana");
  alert('123')
 });
});
</script>

Hauster 27.05.2012 23:23

Цитата:

Сообщение от Deff (Сообщение 177051)
Hauster, A так ?
<button id=butAJaks onclick="opana()">Обновить</button><br>
<script>
$(document).ready(function(){
 $("#butAJaks").live("click", function(){
  allert("Oppana");
  alert('123')
 });
});
</script>

При загрузке документа пишет: Uncaught SyntaxError: Unexpected token <

И ничего при нажатии не происходит.

Deff 27.05.2012 23:25

Hauster,
<button id=butAJaks>Обновить</button><br>

Зачеркнутое то убирали - мну ж спецом зачеркнул

Hauster 27.05.2012 23:28

Цитата:

Сообщение от Deff (Сообщение 177056)
Hauster,
<button id=butAJaks>Обновить</button><br>

Зачеркнутое то убирали - мну ж спецом зачеркнул

<button id="butAjaks">ALERT!</button>
<script>
$(document).ready(function(){
 $("#butAJaks").live("click", function(){
  allert("Oppana");
  alert('123')
 });
});
</script>


Уж извините, догадался.

Deff 27.05.2012 23:29

Hauster,
:-E Соррь - там два LL в ALERT - поправил

Hauster 27.05.2012 23:37

Цитата:

Сообщение от Deff (Сообщение 177058)
Hauster,
:-E Соррь - там два LL в ALERT - поправил

Это не меняет ситуации, но спасибо.

В общем, решил проблему отдельно подключая JavaScript.

$.ajax({
                                    type: "POST",
                                    url: "/scripts/upon.js",
                                    dataType: "script",
                                    success: javac
                                    });


Извращенски конечно, но да ладно. Работает же :D

Deff 27.05.2012 23:46

Hauster,
Ну а кто мешает запихнуть весь код в JS ? Дабы не было двух запросов....

Hauster 27.05.2012 23:56

Цитата:

Сообщение от Deff (Сообщение 177062)
Hauster,
Ну а кто мешает запихнуть весь код в JS ? Дабы не было двух запросов....

Запихнуть HTML в JS? o_0

Сам то хоть пробывал? :D

Deff 28.05.2012 23:14

Цитата:

Сообщение от Hauster
Сам то хоть пробывал?

Я имел ввиду засунуть подгружаемые элементы типо так, в этом же скрипте:
var s='<button onclick="opana()">Обновить</button><br>';
$("#writebox").append(s)


Часовой пояс GMT +3, время: 14:02.