Тема: javascript у файлі.php
Не можу виконати функцію javascript у файлі .php
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → PHP → javascript у файлі.php
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Ні, це не справа. "Не можу". Тю. Так змусь себе! Що значить "не можу" - це просто "не хочу", сказане так, щоб себе заспокоїти.
От якби була конкретна проблема - код, опис помилки, якісь роздуми... Тоді було б про що балакати.
Скріпт містить пошук елемента по id та подальші дії з ним. А елемента цього насправді нема, тому що він написаний через echo. Що роблять у таких ситуаціях?
З вас треба умови задачі кліщами витягувати? Та приведіть кусок коду, що саме не робить, які помилки..тут екстрасенсів немає.
По суті, взагалі питання якесь некоректне. Яваскріпт клієнтска мова, виконується в браузері. PHP на сервері, і він поняття не має про якісь там браузери, він собі відпрацював на тій машині, передав вивід і все. Але так, можна догадуватись, що у вас якийсь елемент виводиться через echo, і яваскріпт код має шось з ним робити але не робить..чому? Може, варто код виводу елемента поставити вище від коду вивода яваскріпта (перенести скріпти вниз тега body), або поставити в яваскріпт обробник onload, або заюзати jquery.
Картина така:
Цикл виводить пости. Кожен пост складається з контенту та кнопки "коментарі". При натисненні на кнопку повинен виводитися div з коментарями.
Мены здається, що воно і не повино працювати.
Мены здається, що воно і не повино працювати.
мені здається, що це самий епічний коментар на форумі.
Кожен пост складається з контенту та кнопки "коментарі". При натисненні на кнопку повинен виводитися div з коментарями.
Ну, можна ще в PHP виводити весь контент (в т.ч. коментарі), але робити display:none, тобто не показувати, а яваскріптом робити видимим, коли потрібно. Так, це погане рішення, але працювати буде.
А взагалі, що це за код? Хто його писав і чому не може поправити як треба? Чому запитання задаєте ви, а не той программіст, і чому ви не можете переписати код з 0, а не правити неясно шо.
Ну, можна ще в PHP виводити весь контент (в т.ч. коментарі), але робити display:none, тобто не показувати, а яваскріптом робити видимим, коли потрібно. Так, це погане рішення, але працювати буде.
Емм... Я так і хотів. Чому погане?
Яваскріптом видимим не зробиться, і я питаю, як зробити, щоб зробилося.
<script>
function comments_open(){
var obj = document.getElementById(comments);
if (obj.style.display != "block") {
obj.style.display = "block";
}
else obj.style.display = "none";
}
</script>
А взагалі, що це за код? Хто його писав і чому не може поправити як треба? Чому запитання задаєте ви, а не той программіст, і чому ви не можете переписати код з 0, а не правити неясно шо.
Я і є той програміст
Я так і хотів. Чому погане?
Тому що виводяться лишні дані, непотрібні в данний момент. Але, може в сучасному вебі це допустимо. У мене просто є така хвороба, як ассемблер в анамнезі, і я привик все оптимізувати до ідеалу.
Яваскріптом видимим не зробиться, і я питаю, як зробити, щоб зробилося.
Виправте це (візьміть у лапки), і все заробить
.getElementById("comments");
Тільки при кликанні на кнопку коментарів у будь-якому посту відкриваються коментарі лише у першому зверху.
Ну так логічно. getElementById вибирає один (чи перший чи який там) елемент, і його відкриває. Назвіть то якось інакше, чи шукайте не по id, а беріть елемент вище кнопки.. Взагалі, я би радив спочатку почитати якусь матчасть про роботу з DOM, або вивчити jQuery, а потім уже шось кодити.
id - сама наза ж говорить, унікальність
Я не знаю, яка у вас там структура DOM-дерева. Ви ж код не можете викласти уже який пост, так якби там якісь zero-day техніки були, а не примітивні скріпти.
Тобто після слова document мені треба росписати шлях до об'єкта?
Тобто вам треба згадати віршик з программи першого класу, конкретно -
Як добре вміти читати!
Не треба до мами приставати..
і застосувати ідею, закладену у віршику, на практиці, а саме - найти і відкрити таки той мануал по моделі DOM.
сказав би хоча б так/ні
Як я можу відповісти так чи ні, якщо я не бачив вашого дом дерева? Звідки я знаю, де ті елементи і як розташовані. Може це батьківські, чи на 2 рівні вище, чи сусідні, чи ще якісь? Чорт його знає, яка там верстка.
Поясніть мені, чому ви не хочете почитати ту невелику документацію і таки зрозуміти, як воно працює, а замість того вирішуєте проблему методом експериментів чи тупо сидячи на форумі, в надії що хтось напише код? Ви і надалі збираєтесь так само програмувати? Я тоді не завидую користувачам того сайта, бо якщо візуальні компоненти це єрунда (ну вивелось криво, ну підвисло), то є питання безпеки, де такий фокус (скопіпастив шось і вставив, працює і добре) не пройде.
І ще раз повторюсь - чого би не взяти jQuery? Там все проще, найшов елемент, і append/prepend, добавив, забрав. Який смисл писати на чистому жс, не розуміючи його?
Я запитував про свої дії, маючи на увазі ''чи правильно я вас зрозумів?''. Як на мене, із цим питанням труднощів не повино бути.
беріть елемент вище кнопки.
Як?)
Можете зробити як тут :
Для дерева DOM
[class='list']
│
├─── div[id='ref1']
│ │
│ ├─── *
│ ├─── a[href='#ref1']
│ ├─── a[href='#']
│ ├─── *
│ ...
│
├─── div[id='ref2']
│ │
│ ├─── *
│ ├─── a[href='#ref2']
│ ├─── a[href='#']
│ ├─── *
│ ...
│
...
HTML
<div class="list">
<div id="ref1">
<p>Some text 1</p>
<a href="#ref1">Show 1</a>
<a href="#">Hide 1</a>
<p>More text 1</p>
</div>
<div id="ref2">
<p>Some text 2</p>
<a href="#ref2">Show 2</a>
<a href="#">Hide 2</a>
<p>More text 2</p>
</div>
<!-- ... -->
</div>
CSS
.list>div {
display: inline-block;
padding: 0 1em;
margin: 0.5em auto;
vertical-align: top;
}
.list>div>* {
display: block;
margin: 1em 0;
}
.list>div>a[href^="#"]~*,
.list>div:target>a[href^="#"] {
display: none;
}
.list,
.list>div:target>a[href^="#"]~* {
display: block;
}
JS
function setAttributeForAllElementsAfterSpecified(element, attrName, attrValue) {
while(element = element.nextElementSibling)
element.setAttribute(attrName, attrValue);
};
function toggle(element) {
if(element.getAttribute("href").charAt(0) !== "#")
return true;
var style = element.getAttribute("style");
if(style === "display:none;") {
element.setAttribute("style", "display:block;");
setAttributeForAllElementsAfterSpecified(element, "style", "display:none;");
}
else {
element.setAttribute("style", "display:none;");
setAttributeForAllElementsAfterSpecified(element, "style", "display:block;");
}
return false;
};
document.addEventListener("DOMContentLoaded", function(event) {
var anchorsSnapshot = document.evaluate(
"//*[contains(@class,\'list\')]/div/a[starts-with(@href,\'#\')][1]",
document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0; i < anchorsSnapshot.snapshotLength; i++) {
var anchor = anchorsSnapshot.snapshotItem(i);
anchor.setAttribute("onclick", "toggle(this)");
anchor.nextElementSibling.setAttribute("onclick", "toggle(this.previousElementSibling)");
}
});
Така структура документа хороша тим, що її легко змінювати і сторінка буде працювати навіть тоді, коли JavaScript виключений.
Завантажте прикріплений архів ("index.7z"), розпакуйте документ ("index.html"), відкрийте в браузері, подивіться як він працює, і якщо це те що вам потрібно, то застовуйте ці CSS і JS до свого коду.
Якщо виникнуть питання про це
"//*[contains(@class,\'list\')]/div/a[starts-with(@href,\'#\')][1]"
, то це XPath, тут все розписано.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися