.innerHTML и .html()
целый день уже не могу понять почему так происходит, значит есть элемент, при клике по нему создаётся новый блок, и потом через ajax данные попадают в этот блок
var form = document.createElement('div'); form.setAttribute('id', 'reg'); form.innerHTML = '<img src="/assets/img/loading.gif" width="227" height="28" alt="Loading..." style="margin-left:-10px;margin-top:-10px;">'; document.body.appendChild(form); ajax({ url: '/reg/', cache: false, success: function(data) { form.innerHTML = data; } }); data в себе также содержит код js необходимый для функционирования полученных данных, так вот, всё вроде получается, данные попадают куда надо, в том числе и js код, но загруженный js не работает, что странно, когда подключаю jquery и пишу $('#reg').html(data), то всё прекрасно работает, попробовал сделать вот так: document.getElementById('reg').innerHTML = data; не помогло, попробал убрать src у тега script и вписать код прямо в нём (ну а мало ли что), тоже не помогло, вобщем как ни стараюсь скрипт не хочет работать без .html(), а только из-за этого подключать jquery слишком жирно, подскажите пожалуйста как быть |
Tecvid,
элементы c js в jQuery нун подгружать на страницу таким макаром Цитата:
В нативном js, чтобы скрипт заработал нун сначало создать элемент: var s = document.createElement('script'); Затем добавить содержимое скрипта: s.text = cодержимое; Затем добавить скрипт на страницу: document.body.appendChild(s); ============= var s = document.createElement('script'); s.text = "alert('A')"; document.body.appendChild(s); |
Deff,
:blink: а jQuery тут причём? |
Цитата:
|
Цитата:
=============== Приведите конкретный пример содержимого формы с исполняемым js - Так будет проще решать, чем на пальцах! |
Цитата:
|
Цитата:
Если нативно то уж XMLHttpReques |
Tecvid,
Аякс - из jQuery ? или откель ? |
Цитата:
<link type="text/css" rel="stylesheet" href="/assets/css/reg.css"> <div id="note"></div> <img id="close" src="assets/img/close.gif" width="7" height="8" alt="x"> <form id="regForm" name="reg" action="/reg/register/" method="post"> <input id="email" class="standby" type="text" name="email" maxlength="100" value="E-mail"> <input id="passP" class="standby" type="text" value="Şifrə"><input id="pass" class="standby" type="password" name="pass" maxlength="50" value=""> <input id="confP" class="standby" type="text" value="Şifrəni təsdiqləyin"><input id="conf" class="standby" type="password" name="conf" maxlength="50" value=""> <input id="fname" class="standby" type="text" name="fname" maxlength="50" value="Ad"> <input id="sname" class="standby" type="text" name="sname" maxlength="50" value="Soyad"> <span class="radio"> <input id="M" type="radio" name="gender" value="m"> <label id="male" for="M">Kişi</label> </span> <span class="radio"> <input id="F" type="radio" name="gender" value="f"> <label id="female" for="F">Qadın</label> </span> <input id="bd" class="born standby" type="text" name="bd" maxlength="2" value="Gün"> <input id="bm" class="born standby" type="text" name="bm" maxlength="2" value="Ay"> <input id="by" class="born standby" type="text" name="by" maxlength="4" value="İl"> <input id="submit" type="submit" name="submit" value="Qeydiyyat"> </form> <input id="auth2" type="button" value="Giriş"> <script type="text/javascript" src="/assets/js/reg.js"></script> |
Цитата:
function ajax(options) { function getXmlHttp() { var xmlhttp; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { xmlhttp = new XMLHttpRequest(); } return xmlhttp; } var xmlhttp = getXmlHttp(), type = options.type || 'GET'; xmlhttp.open(type, options.url, true); xmlhttp.setRequestHeader('X-REQUESTED-WITH', 'XMLHttpRequest'); xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { if(xmlhttp.status == 200) { options.success(xmlhttp.responseText); } } }; var data = options.data || null; xmlhttp.send(data); } |
html форму показал, а вот js код не получается, на форуме лимит в 1290 символов
|
Tecvid,
У Вас загружаемый скрипт в форме при любом раскладе, вписанный не через document.write будет загружен асинхронно, поэтому после загрузки формы вы можете ничего не дождаться, обработку тогда нун делать в самом подгружаемом скрипте, либо вписывать в форму полнотекстовую версию скрипта |
Tecvid,
jQuery парсит html перед вставкой и если видит скрипт то создаёт его на странице а не просто вставляет. |
Tecvid,
А подгрузить скрипт отдельно Аяксом? После загрузки формы Если Скрипт с того же домена -Вы можете его текст Аяксом же и считать |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Tecvid,
form.appendChild(data); |
Цитата:
|
<script> подключённый через innerHTML не исполняется. Функция html из jquery сама ищет скрипты в передаваемой строке и проводит предварительную обработку перед вставкой.
Хотите чтоб работало также - смотрите исходники jquery или пишите свой велосипед. Хотите чтоб работало по-человечески - перепишите нормально код: не должны внезапно вылезать какие-то скрипты в получаемой строке. Все актуальные скрипты должны быть заранее загружены и готовы к работе. |
Tecvid, 1 алерт это типа ajax прибыл ))) 2 алерт это вставка скрипта и его работа
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <script> alert(12345) </script> </head> <body> <div id='form'></div> <script > var data = document.getElementsByTagName('script')[0];//находим скрипт в html var s = document.createElement('script'); //создаём дубликат s.type = "text/javascript"; s.text = data.text;//вставляем содержимое в дубликат document.getElementById('form').appendChild(s) //вставка на страницу </script> </body> </html> |
Цитата:
|
Tecvid,
гммм ... когда есть что парсить |
Цитата:
|
такую херню пишет :blink:
Uncaught TypeError: Cannot read property 'appendChild' of null |
Tecvid,
ajax({ url: '/reg/', cache: false, success: function(data) { form.innerHTML = data; data = form.getElementsByTagName('script')[0];//находим скрипт в html var s = document.createElement('script'); //создаём дубликат s.type = "text/javascript"; s.text = data.text;//вставляем содержимое в дубликат //form.replaceChild(data,s) form.appendChild(s) //вставка на страницу } }); |
рони,
получилось! спасибо вам большое!!! :) |
Цитата:
Tecvid, тебе тут помогают. Прояви уважение. Ответь хоть на предложение. Трудно чтоли написать "Я блядь не хочу по-человечески, хочу поуебански". |
Цитата:
ну в принципе код написан по человечески, а скрипт вылезает в полчаенной строке вот почему: скрипт нужен только для работы с полученными данными, а эти данные пользователь может и не загрузить, поэтому не вижу смысла заранее подключать этот громоздский скрипт, который пользователь не понадобится если он не загрузит те данные, надеюсь ясно выразился |
Часовой пояс GMT +3, время: 22:14. |