Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Корректная генерация html-кода в Java Script
 
 автор: coloboc66   (07.09.2010 в 09:15)   письмо автору
 
 

В РНР корректная генерация кода требует обязательного использования кавычек при задании свойств элементов:
echo "<input type='text' value='100' />";

Есть ли такое же требование в Java Script или это необязательно?
Спасибо.

  Ответить  
 
 автор: deimand   (07.09.2010 в 10:01)   письмо автору
 
   для: coloboc66   (07.09.2010 в 09:15)
 

вообще то наоборот :)
echo '<input type="text" value="100" />';

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 10:46)   письмо автору
 
   для: deimand   (07.09.2010 в 10:01)
 

Это где такое написано???

  Ответить  
 
 автор: deimand   (07.09.2010 в 11:01)   письмо автору
 
   для: coloboc66   (07.09.2010 в 10:46)
 

А по теме - не очень понятно чего вы хотите. php все равно, что вы ему укажите генерировать, как собственно и яваскрипту.

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 11:08)   письмо автору
 
   для: deimand   (07.09.2010 в 11:01)
 

РНР всё-равно, да вот только при незаключении свойств в кавычки и включении переменных возникают ошибки при работе интерпретатора РНР. Вот я и хочу знать, могут ли возникнуть подобные ошибки в ява-скрипт?

  Ответить  
 
 автор: deimand   (07.09.2010 в 11:11)   письмо автору
 
   для: coloboc66   (07.09.2010 в 11:08)
 

В приведенном вами примере ничего подобного не происходит. Может покажете пример, где возникают ошибки?

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 11:19)   письмо автору
 
   для: deimand   (07.09.2010 в 11:11)
 

В данный момент не покажу, не помню точно, но помню, что сталкивался с этим не раз. Да и на форуме РНР темы по этой проблеме видел неоднократно. Кажется, при динамической генерации кода с использованием $_GET - переменных.
А приведенный код действительно проблем не даст, т.к. он очень простой и не имеет переменных.

  Ответить  
 
 автор: sim5   (07.09.2010 в 11:40)   письмо автору
 
   для: coloboc66   (07.09.2010 в 11:08)
 

echo "<input type='text' value='100' />" - в этой строке нет РНР-переменных и проблем никаких для него не будет.

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 11:45)   письмо автору
 
   для: sim5   (07.09.2010 в 11:40)
 

Да знаю что не будет. Будут проблемы при работе с переменными, если не заключать свойства в кавычки.

  Ответить  
 
 автор: sim5   (07.09.2010 в 11:54)   письмо автору
 
   для: coloboc66   (07.09.2010 в 11:45)
 

А какое отношение РНР $varname = "string" имеет к HTML <input varname=string, где вы можете вообще не указать кавычек?

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 12:02)   письмо автору
 
   для: sim5   (07.09.2010 в 11:54)
 

Вопрос сводится вот к чему: в ява-скрипт тоже можно включать переменные в генерацию html -кода. Требуется ли и там также явно заключать свойства тегов в кавычки, как и в РНР? Или на это можно не обращать внимания?

  Ответить  
 
 автор: sim5   (07.09.2010 в 12:10)   письмо автору
 
   для: coloboc66   (07.09.2010 в 12:02)
 

Ну это смотря что имеется ввиду, если имя тега, то html не ругнется, если вы опустите кавычки, но если вы подставляете строковое значение в объявляемую js-переменную или строковый аргумент функции, то отсутствие кавычек в этом случае будет ошибкой:
<script>
var s = "<?php echo $var?>";
//а так неверно
var s = <?php echo $var?>;
</script>

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 12:45)   письмо автору
 
   для: sim5   (07.09.2010 в 12:10)
 

А что вернее, вот это:
var a=100;
document.getElementById('mydiv').innerHTML="<input type='text' value="+a+ "/>";

Или это:
var a=100;
document.getElementById('mydiv').innerHTML="<input type=text value="+a+ "/>";

?

  Ответить  
 
 автор: sim5   (07.09.2010 в 12:59)   письмо автору
 
   для: coloboc66   (07.09.2010 в 12:45)
 

А вы проверьте - будут ли проблемы в исполнении:
<input type="text" name="as1" onclick="alert(this.name)">
<input type=text name=as2 onclick="alert(this.name)">

  Ответить  
 
 автор: psychomc   (07.09.2010 в 11:14)   письмо автору
 
   для: coloboc66   (07.09.2010 в 10:46)
 

принято атрибуты html-тегов заключать в двойные, а код js в одинарные

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 11:50)   письмо автору
 
   для: psychomc   (07.09.2010 в 11:14)
 

Если вы будете заключать атрибуты в двойные кавычки, то вы не сможете так просто считывать значения переменных РНР, их придётся выделять из строк.

  Ответить  
 
 автор: psychomc   (07.09.2010 в 12:04)   письмо автору
 
   для: coloboc66   (07.09.2010 в 11:50)
 

я например вообще никогда не делаю интерполяцию. делаю просто объединение строк. хотя бы потому, что повышается читабельность кода
да и тем более есть еще экранирование

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 12:47)   письмо автору
 
   для: psychomc   (07.09.2010 в 12:04)
 

В ява-скрипт экранирования нет, если я не ошибаюсь.

  Ответить  
 
 автор: psychomc   (07.09.2010 в 13:01)   письмо автору
 
   для: coloboc66   (07.09.2010 в 12:47)
 

если ошибаетесь

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 13:05)   письмо автору
 
   для: psychomc   (07.09.2010 в 13:01)
 

Приведите пример кода с экранированием!

  Ответить  
 
 автор: psychomc   (07.09.2010 в 13:27)   письмо автору
 
   для: coloboc66   (07.09.2010 в 13:05)
 


.. .innerHTML = "<div onclick='javascript:alert( \"aaaa\" );'>

  Ответить  
 
 автор: sim5   (07.09.2010 в 13:30)   письмо автору
 
   для: psychomc   (07.09.2010 в 13:27)
 

<div onclick="alert('aaaa')">

  Ответить  
 
 автор: psychomc   (07.09.2010 в 13:32)   письмо автору
 
   для: sim5   (07.09.2010 в 13:30)
 

это всего лишь пример был. человек не знает что в js есть экранирование. написал ему в его же стиле с одинарными кавычками

p.s да, javascipt там лишнее

такое чувство что он пишет в обычном блокноте. иначе не вставали бы такие вопросы, т.к подсветка реально помогает. и не делал бы интерполяцию скорее всего

  Ответить  
 
 автор: sim5   (07.09.2010 в 13:42)   письмо автору
 
   для: psychomc   (07.09.2010 в 13:32)
 

Вообще, с учетом того, что редакторы зачастую по разному подсвечивают строки заключенные в одинарные и двойные кавычки, я предпочитаю обрамлять значения атрибутов двойными кавычками, в этом случае они подсвечивается цветом отличным от имен тегов и самих атрибутов.

  Ответить  
 
 автор: psychomc   (07.09.2010 в 13:43)   письмо автору
 
   для: sim5   (07.09.2010 в 13:42)
 

а я предпочитаю настраивать подсветку под себя ;)

  Ответить  
 
 автор: sim5   (07.09.2010 в 13:45)   письмо автору
 
   для: psychomc   (07.09.2010 в 13:43)
 

Ну да, велика была бы надобность шерстить каждый понравившийся редактор в настройках. Если мне нравится подсветка HomeSite, удобная для меня, то разукрашивать ее еще чем-то, это уже излишество.

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 13:57)   письмо автору
 
   для: psychomc   (07.09.2010 в 13:27)
 

Минуту...
Да не работает ваш код!
Работает только без слэшей внутри алерт и по другому событию, но не по onclick. Во-вторых, такой код в принципе бесполезен. Покажите, как экранировать кавычки, обрамляющие свойство type=text вот здесь:
...innerHTML="<input type='text' />";

?

  Ответить  
 
 автор: sim5   (07.09.2010 в 14:15)   письмо автору
 
   для: coloboc66   (07.09.2010 в 13:57)
 

Именно здесь ничего не надо экранировать, пока вы не будет это выводить в РНР, например, так:
<?
echo "...innerHTML=<input type=\"text\" />";

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 14:46)   письмо автору
 
   для: sim5   (07.09.2010 в 14:15)
 

psychomc утверждает, что в ява-скрипт экранирование есть. Пусть покажет рабочий пример. Я пока не вижу.

  Ответить  
 
 автор: psychomc   (07.09.2010 в 14:50)   письмо автору
 
   для: coloboc66   (07.09.2010 в 14:46)
 

потому что в javascript вы ..уй с горы



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title></title>
    </head>
    <body>
        <h1 id="id1">тег</h1>
        <script>
            document.getElementById('id1').innerHTML = "<div onclick='alert(\"aaaa\");'>кликни сюда, js-man :)</div>";
        </script>
    </body>
</html>

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 14:55)   письмо автору
 
   для: psychomc   (07.09.2010 в 14:50)
 

---

  Ответить  
 
 автор: psychomc   (07.09.2010 в 14:57)   письмо автору
 
   для: coloboc66   (07.09.2010 в 14:55)
 

работает?

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 15:00)   письмо автору
 
   для: psychomc   (07.09.2010 в 14:57)
 

...уй с горы - это ты. Повторяю, твой пример не работает, теперь покажи экранирование в input type=text

  Ответить  
 
 автор: psychomc   (07.09.2010 в 15:06)   письмо автору
 
   для: coloboc66   (07.09.2010 в 15:00)
 

смотри

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title></title>
    </head>
    <body>
        <h1 id="id1">тег</h1>
        <script>
            document.getElementById('id1').innerHTML = "<input type=\"text\" value=\"хватит тупить\"/>";
        </script>
    </body>
</html>


я вот не понимаю, у тебя проблема с браузером или с чем-то другим?
работает под ie6, firefox 3, opera 10

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 15:40)   письмо автору
 
   для: psychomc   (07.09.2010 в 15:06)
 

Вот это вроде заработало. С тебя бутылка...

  Ответить  
 
 автор: psychomc   (07.09.2010 в 15:46)   письмо автору
 
   для: coloboc66   (07.09.2010 в 15:40)
 

:)
p.s настоятельно рекомендую какой-нибудь редактор с подсветкой, типа notepad++ , если конечно уже не пользуетесь.

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 15:56)   письмо автору
 
   для: psychomc   (07.09.2010 в 15:46)
 

И что он мне даст, этот редактор?

  Ответить  
 
 автор: psychomc   (07.09.2010 в 16:05)   письмо автору
 
   для: coloboc66   (07.09.2010 в 15:56)
 

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

  Ответить  
 
 автор: psychomc   (07.09.2010 в 11:15)   письмо автору
 
   для: coloboc66   (07.09.2010 в 09:15)
 

вообще-то, для корректной генерации кода в js используются функции типа createElement( ), а не просто функции вывода

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 11:20)   письмо автору
 
   для: psychomc   (07.09.2010 в 11:15)
 

Кем используются? Я их не использую и не вижу необходимости. Такие функции нужны при работе с DOM, а не при генерации html, для чего вполне хватает свойства innerHTML.

  Ответить  
 
 автор: psychomc   (07.09.2010 в 12:08)   письмо автору
 
   для: coloboc66   (07.09.2010 в 11:20)
 

я считаю что это более грамотный подход, и думаю многие согласятся

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 12:51)   письмо автору
 
   для: psychomc   (07.09.2010 в 12:08)
 

Ну это спорный вопрос. С DOM работать сложней, чем с обычной моделью. Зачем тогда городить огород??? Да и разные браузеры могут интерпретировать DOM по-разному, и тут можно наступить на хорошие грабли.:)))
DOM нужно использовать только тогда, когда она действительно нужна, например, при динамической генерации тегов.

  Ответить  
 
 автор: psychomc   (07.09.2010 в 13:02)   письмо автору
 
   для: coloboc66   (07.09.2010 в 12:51)
 

никогда не встречал таких граблей.

  Ответить  
 
 автор: coloboc66   (07.09.2010 в 14:14)   письмо автору
 
   для: psychomc   (07.09.2010 в 13:02)
 

К примеру, вот здесь:
<node1>a</node1>
<node2>b</node2>

разные браузеры интерпретируют пространство между </node1> и <node2> по-разному.

  Ответить  
 
 автор: sl1p   (07.09.2010 в 14:31)   письмо автору
 
   для: coloboc66   (07.09.2010 в 14:14)
 

если в жс будете выводить так, то он ругнётся
<node1>a</node1> 
<node2>b</node2>


ибо надо так:)

..innerHTML = "<node1>a</node1>\n<node2>b</node2>";

  Ответить  
 
 автор: ghesh   (07.09.2010 в 13:39)
 
   для: coloboc66   (07.09.2010 в 09:15)
 

ничего подобного пхп не требует. и яваскрипт тоже не требует.
требует хтмл.
значение аттрибута type внешне никак не влияет на результат, если его не заключить в ковычки.
а с value дела обстоят по-другому: если значение без пробела - все будет ок,
но стоит поставить пробел, его значением станет строка до первого пробела.
поэтому значение аттрибута value нужно обязательно заключать в ковычки.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования