Вызвать функцию js из php, но свойство не найдено

Uncaught TypeError: невозможно прочитать свойства null при вызове функции js test(). Что не так с этим примером кода? Есть ли лучший способ вызвать функцию js из php для манипулирования DOM?

HTML

<form method = "post" action = "#">
    <input type = "text" id = "inp">Test</input>
    <button type = "submit" id = "submit" name = "submit" value = "submit"></button>
</form>

php

if (isset($_POST['submit')]
{
    $wrongInput= some code...

    if ($wrongInput)
    {
        echo "<script src=main.js></script>";
        echo "<script type=text/javascript>test();</script>"
    }
}

js

function test()
{
    document.querySelector("#submit").style.background = "red";
}

Пропали кавычки? src=main.js

Louys Patrice Bessette 20.03.2022 17:36

@LouysPatriceBessette не должна быть проблемой. Вызов функции test() работает, но манипуляция с домом не работает...

user16405471 20.03.2022 17:39

Вероятно, функция вызывается до загрузки DOM.

Louys Patrice Bessette 20.03.2022 17:40

@LouysPatriceBessette, это тоже мое предположение. Но я не знаю, как это исправить. Должен ли я использовать функцию setTimeout для ожидания загрузки dom? как лучше всего?

user16405471 20.03.2022 17:43

Вы не можете вызывать функции javascript напрямую из PHP. Код будет отправлен в браузер после отправки и запуска страницы, как это было бы частью загрузки страницы.

Nigel Ren 20.03.2022 17:45

добавьте differ к вашим тегам script

medilies 20.03.2022 17:46

@medilies: ты имеешь в виду defer... лол! отложить

Louys Patrice Bessette 20.03.2022 17:47

@LouysPatriceBessette Мне действительно нужно было немного IntelliSense в текстовой области комментария XD

medilies 20.03.2022 17:50

@NigelRen хорошо, вызов функции test () работает. если я помещаю alert() в функцию test(), она выполняется, но свойство #submit еще не установлено...

user16405471 20.03.2022 17:50

В конечном итоге он будет выполнен, я сказал, что он будет выведен в браузер и затем выполнен. Это не означает, что он выполняется во время запуска PHP-кода.

Nigel Ren 20.03.2022 17:53

@medilies, к сожалению, у меня отсрочка не сработала...

user16405471 20.03.2022 17:54

@NigelRen да, наверное, это правильно, но как мне решить эту проблему? используя setTimeout для моей тестовой функции или есть лучший способ?

user16405471 20.03.2022 17:56

поместите " ' " здесь: $wrongInput= некоторый код... $wrongInput= "некоторый код..." и echo "<script defer type='text/javascript'>test();</script>"

Eugene Kapustin 20.03.2022 17:58

Попробуйте document.addEventListener("DOMContentLoaded", function(){ test() }) или даже лучше document.addEventListener("DOMContentLoaded", test )

Louys Patrice Bessette 20.03.2022 17:59

@LouysPatriceBessette отлично, ты спасла меня!!!!

user16405471 20.03.2022 18:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
15
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Непонятно, где это отображается на странице... Но наверняка DOM нужно загрузить, чтобы querySelector нашел элемент. Таким образом, использование события DOMContentLoaded — это способ убедиться, не обращая внимания на то, где находится эхо. ;)

if (isset($_POST['submit')]
{
    $wrongInput= //some code...

    if ($wrongInput)
    {
        echo "<script src='main.js'></script>";
        echo "<script>document.addEventListener('DOMContentLoaded', test);</script>";
    }
}

Другие вопросы по теме