Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка CSS 
:(
    Опции темы
MrDmitry
Дата 8.4.2013, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Здраствуйте. Столкнулся с такой задачей. 


Формирую html код 


Код

var objects = new Array();

var div = 'test';

$.post("Create.php", {object:div}, function(data){
          objects = data;
         },
         "json"
       );


В php файле формирую html и css(только не спрашивайте зачем smile)

Код

$div = '<div id="'.$_POST['object'].'" onclick=alert("Тест")>текст</div>';

$csscode = "border: 1px solid #000000; width:100px; height:100px; left:471px; top:500px;";
$file=fopen("style.css","a"); 
     $text="#".$_POST['object']."{ ".$csscode."} \r\n";
     fwrite($file,$text);
     fclose($file);

$array = array($div, $csscode);

echo json_encode($array);


Ну и в js пытаюсь вставить такой обьект на страницу.

Код

$('#work').append(objects[1]);


По итогу получаю что обьект вставляется на страницу, но стили из формированого css не отоброжается. (Тоесть визуально обьект на страницу не отоброжается. 

Хотя если после этого добавить такой обьект в html страницу "Ручками" 

Код

<div id="work" ><div id="test" onclick="alert('Тест')">текст</div></div>


то стили из файла style.css применяются.

Это сообщение отредактировал(а) MrDmitry - 8.4.2013, 01:22
PM MAIL   Вверх
Arantir
Дата 8.4.2013, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 14
Всего: 55



Только не говорите, что запись в style.css производится между завершением загрузки страницы и добавлением элемента #test...


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
MrDmitry
Дата 8.4.2013, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Не совсем понял вопроса. Что значит между завершением загрузки страницы? Да, страница уже загружена и добавление происходит по нажатию кнопочки. Теоретически я конечно догадываюсь почему не работает, но надеюсь что решение можно найти или тут мне подскажут иной путь решения задачи ))

Это сообщение отредактировал(а) MrDmitry - 8.4.2013, 03:57
PM MAIL   Вверх
MrDmitry
Дата 8.4.2013, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Есть у кого нибуть какие нибуть мысли? 
PM MAIL   Вверх
Arantir
Дата 8.4.2013, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 14
Всего: 55



Цитата(MrDmitry @  8.4.2013,  02:48 Найти цитируемый пост)
Что значит между завершением загрузки страницы?

Там еще вторая половина предложения есть после "и"... И именно это оно и значит.
Цитата(MrDmitry @  8.4.2013,  02:48 Найти цитируемый пост)
Да, страница уже загружена и добавление происходит по нажатию кнопочки

Вы с помощью PHP добавляете CSS в файл, находящийся на удаленном сервере и хотите, чтобы при этом браузер моментально изменил стиль у пользователя? Это же глупость. Но ничего другого из ваших объяснений понять не удалось.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
MrDmitry
Дата 8.4.2013, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



я это понимаю
Цитата

Вы с помощью PHP добавляете CSS в файл, находящийся на удаленном сервере и хотите, чтобы при этом браузер моментально изменил стиль у пользователя? 


Нууууу, именно это я и хочу, менять стиль у пользователя на лету. А какие варианты есть еще? Учитывая что сам css стиль формируется в php, передавать его в массив jq, и применять к обьеку через addClass?

Это сообщение отредактировал(а) MrDmitry - 8.4.2013, 20:24
PM MAIL   Вверх
Sanchezzz
Дата 8.4.2013, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



:yes либо Создать 
Код

<style id="reload"></style>

и
Код

$.post("Create.php", {object:div}, function(data){
          $('#reload').html(data.css);
          $('#work').append(objects[1]);
         },
         "json"
       );

должно сработать но не проверял.

Это сообщение отредактировал(а) Sanchezzz - 8.4.2013, 22:02


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Arantir
Дата 8.4.2013, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 14
Всего: 55



Суть работы протокола HTTP знаете? Запрос — ответ. Изменение файла на сервере никаким образом не сказывается на уже загруженной странице. Минимум — файл будет просто перезагружен при обновлении страницы. Но, в зависимости от настроек кеша, он еще неделю может старым у пользователя оставаться.

Чтобы файл обновился, этому должен предшествовать запрос. Вы должны явным образом заставить браузер загрузить содержимое этого файла. 
Для этого можно воспользоваться способом, аналогичным добавлению/изменению картинок средствами JS. При добавлении картинки браузер автоматически ее загрузить (чтобы показать на странице, конечно же). 
Так вот, для тега link действует такой же принцип.
Код

$('head').append('<link rel="stylesheet" href="/css/style.css" type="text/css" />');
Этот код заставит браузер запросить с сервера файл /css/style.css и применить все его содержимое к стилю страницы. Точно так же, как браузер это делает при загрузке страницы, но только в любое нужное вам время. Желательно, чтобы имя файла не повторяло уже существующих подключенных стилей, иначе поведение браузера в этом случае не очень предсказуемо (вдруг не загрузит из-за того, что такой же файл уже загружен).
Второй из способов следует тому же принципу, это добавление тега style. При добавлении style через JS браузер так же попытается применить все стили внутри него, ибо это есть единственная суть сия тега.
Код

$('head').append('<style>body { background: green }</style>');
При этом сохранять стили в удаленном файле не требуется. Можно только генерировать их сервером, а применять сразу у пользователя.


Кстати, есть одна полезная особенность — любые скрипты в любом случае загружаются уже после тега head в DOM (так как они всегда либо в нем, либо ниже него). Так что для добавления нового стиля на страницу даже не обязательно ждать загрузки страницы (события load), можно вписать добавление первой же строкой первого скрипта и это будет работать. Так что, если стиль должен быть применен сразу, то эта особенность может помочь избежать эффекта блика, когда стиль резко меняется где-то между началом загрузки страницы и догрузкой DOM, css и js.

Добавлено через 2 минуты и 20 секунд
Sanchezzz, долго писал =)

Это сообщение отредактировал(а) Arantir - 8.4.2013, 22:30


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Sanchezzz
Дата 8.4.2013, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



Arantir, Зато развернутый ответ как статья + еще один способ о котором я не вспомнил.

Можно попробывать еще аттребут сменить у линка с гет параметром в виде времени тоже может сработать.


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1278 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.