Тема: javascript у файлі.php

Не можу виконати функцію javascript у файлі .php

2

Re: javascript у файлі.php

Ні, це не справа. "Не можу". Тю. Так змусь себе! Що значить "не можу" - це просто "не хочу", сказане так, щоб себе заспокоїти.

От якби була конкретна проблема - код, опис помилки, якісь роздуми... Тоді було б про що балакати.

Подякували: ostap34PHP, flatliner2

3

Re: javascript у файлі.php

Скріпт містить пошук елемента по id та подальші дії з ним. А елемента цього насправді нема, тому що він написаний через echo. Що роблять у таких ситуаціях?

4

Re: javascript у файлі.php

З вас треба умови задачі кліщами витягувати? Та приведіть кусок коду, що саме не робить, які помилки..тут екстрасенсів немає.

По суті, взагалі питання якесь некоректне. Яваскріпт клієнтска мова, виконується в браузері. PHP на сервері, і він поняття не має про якісь там браузери, він собі відпрацював на тій машині, передав вивід і все. Але так, можна догадуватись, що у вас якийсь елемент виводиться через echo, і яваскріпт код має шось з ним робити але не робить..чому? Може, варто код виводу елемента поставити вище від коду вивода яваскріпта (перенести скріпти вниз тега body), або поставити в яваскріпт обробник onload, або заюзати jquery.

Подякували: leofun011

5

Re: javascript у файлі.php

Картина така:
Цикл виводить пости. Кожен пост складається з контенту та кнопки "коментарі". При натисненні на кнопку повинен виводитися div з коментарями.
Мены здається, що воно і не повино працювати.

6

Re: javascript у файлі.php

Олексій написав:

Мены здається, що воно і не повино працювати.

мені здається, що це самий епічний коментар на форумі.

Кожен пост складається з контенту та кнопки "коментарі". При натисненні на кнопку повинен виводитися div з коментарями.

Ну, можна ще в PHP виводити весь контент (в т.ч. коментарі), але робити display:none, тобто не показувати, а яваскріптом робити видимим, коли потрібно. Так, це погане рішення, але працювати буде.

А взагалі, що це за код? Хто його писав і чому не може поправити як треба? Чому запитання задаєте ви, а не той программіст, і чому ви не можете переписати код з 0, а не правити неясно шо.

7 Востаннє редагувалося Олексій (19.07.2018 22:17:37)

Re: javascript у файлі.php

Ну, можна ще в 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, а не правити неясно шо.

Я і є той програміст

8

Re: javascript у файлі.php

Я так і хотів. Чому погане?

Тому що виводяться лишні дані, непотрібні в данний момент. Але, може в сучасному вебі це допустимо. У мене просто є така хвороба, як ассемблер в анамнезі, і я привик все оптимізувати до ідеалу.

Яваскріптом видимим не зробиться, і я питаю, як зробити, щоб зробилося.

Виправте це  (візьміть у лапки), і все заробить

.getElementById("comments");
Подякували: leofun011

9

Re: javascript у файлі.php

Тільки при кликанні на кнопку коментарів у будь-якому посту відкриваються коментарі лише у першому зверху.

10

Re: javascript у файлі.php

Ну так логічно. getElementById вибирає один (чи перший чи який там) елемент, і його відкриває. Назвіть то якось інакше, чи шукайте не по id, а беріть елемент вище кнопки.. Взагалі, я би радив спочатку почитати якусь матчасть про роботу з DOM, або вивчити jQuery, а потім уже шось кодити.

Подякували: leofun011

11

Re: javascript у файлі.php

id - сама наза ж говорить, унікальність

Подякували: leofun011

12

Re: javascript у файлі.php

беріть елемент вище кнопки.

Як?)

13

Re: javascript у файлі.php

Я не знаю, яка у вас там структура DOM-дерева. Ви ж код не можете викласти уже який пост, так якби там якісь zero-day техніки були, а не примітивні скріпти.

14

Re: javascript у файлі.php

Тобто після слова document мені треба росписати шлях до об'єкта?

15

Re: javascript у файлі.php

Тобто вам треба згадати віршик з программи першого класу, конкретно -

Як добре вміти читати!
Не треба до мами приставати..

і застосувати ідею, закладену у віршику, на практиці, а саме - найти і відкрити таки той мануал по моделі DOM.

16

Re: javascript у файлі.php

Дякую за пояснення

17 Востаннє редагувалося Олексій (20.07.2018 22:53:30)

Re: javascript у файлі.php

сказав би хоча б так/ні

18

Re: javascript у файлі.php

Як я можу відповісти так чи ні, якщо я не бачив вашого дом дерева? Звідки я знаю, де ті елементи і як розташовані. Може це батьківські, чи на 2 рівні вище, чи сусідні, чи ще якісь? Чорт його знає, яка там верстка.

Поясніть мені, чому ви не хочете почитати ту невелику документацію і таки зрозуміти, як воно працює, а замість того вирішуєте проблему методом експериментів чи тупо сидячи на форумі, в надії що хтось напише код? Ви і надалі збираєтесь так само програмувати? Я тоді не завидую користувачам того сайта, бо якщо візуальні компоненти це єрунда (ну вивелось криво, ну підвисло), то є питання безпеки, де такий фокус (скопіпастив шось і вставив, працює і добре) не пройде.

І ще раз повторюсь - чого би не взяти jQuery? Там все проще, найшов елемент, і append/prepend, добавив, забрав. Який смисл писати на чистому жс, не розуміючи його?

19

Re: javascript у файлі.php

Я запитував про свої дії, маючи на увазі ''чи правильно я вас зрозумів?''. Як на мене, із цим питанням труднощів не повино бути.

20

Re: javascript у файлі.php

Олексій написав:

беріть елемент вище кнопки.

Як?)

https://imagecdn3.luxnet.ua/tv24/resources/photos/news/201801/909592_2042295.gif

Можете зробити як тут :
Для дерева 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, тут все розписано.

Post's attachments

index.7z 1.12 kb, 238 downloads since 2018-07-21 

Подякували: morgot1