document.GetElementsByName не работает при отображении в классе PHP

avatar
Douglas Northwell
8 апреля 2018 в 06:28
41
2
0

Я работаю над приложением, которое создает коллаж из изображений (обложек альбомов). Однако всякий раз, когда я запускаю этот код, функция обновления не отправляет предупреждение, поэтому я предполагаю, что она не может найти элементы с именем, которое я назначил с помощью функции onClick. Почему это? Функция рендеринга работает нормально и правильно присваивает имя. Классы написаны на PHP, но пользовательский ввод (события кликов и т. д.) обрабатывается на Javascript.

Вот функция рендеринга, расположенная в классе Album:

public function render()
{
        echo
        "<script>function setName(id){document.getElementById(id).setAttribute('name','selected');}</script>" .
        "<input type='image' onClick='setName(this.id)' id='$this->id' src='" . $this->url . "'/>";
}

Вот функция обновления, расположенная в классе Chart (управляет объектами альбома):

public function update($url)
{
        echo
        "<script type='text/javascript'>" .
        "var clicked = document.getElementsByName('selected');" .
        "alert(clicked[0].id);" .
        "document.getElementById(clicked[0].id).src='" . $url . "';" .
        "clicked[0].setAttribute('name','');" .
        "</script>";
}
Источник
Bagus Tesa
8 апреля 2018 в 06:30
0

нет, не повторяйте в функции. пожалуйста, верните строку вместо этого и повторите эту строку..

Douglas Northwell
8 апреля 2018 в 06:34
0

что ты имеешь в виду? Я помещаю код Javascript в строку, а затем повторяю это?

Douglas Northwell
8 апреля 2018 в 06:38
0

@BagusTesa Функция рендеринга работает нормально, так что я не думаю, что проблема в этом.

Tan Duong
8 апреля 2018 в 07:15
1

document.getElementsByName('selected');" или document.getElementsByName('select');"

Douglas Northwell
8 апреля 2018 в 07:26
0

@TanDuong «выбрано» — это имя элемента, к которому я пытаюсь получить доступ.

Ответы (2)

avatar
Douglas Northwell
8 апреля 2018 в 07:48
0

Оказывается, проблема заключалась в том, что ни один элемент не был назван "выбранным" после отправки формы. Чтобы решить эту проблему, я просто добавил скрытый ввод с именем «выбрано» и присвоил его значению идентификатор последней нажатой кнопки.

<script>
    function setName(id)
    {
        var button = document.getElementsByName('selected');
        button[0].value = id;
    }
</script>

<form name='search' action="" method="post">
<input name="query" type="text" size="100"></input>
<input name='selected' type='hidden'></input>
<input class="submit" type="submit"></input>
</form>

функция обновления теперь работает правильно на моей машине.

avatar
Tan Duong
8 апреля 2018 в 07:30
0

Может быть, вы можете попробовать с событием DOMContentLoaded, чтобы убедиться, что элемент DOM готов. Вам нужно обернуть весь ваш getElement в эту функцию

public function update($url)
{
        echo
        "<script type='text/javascript'>" .
        "document.addEventListener(\"DOMContentLoaded\", function(event) { ".
        "var clicked = document.getElementsByName('selected');" .
        "alert(clicked[0].id);" .
        "document.getElementById(clicked[0].id).src='" . $url . "';" .
        "clicked[0].setAttribute('name','');" .
        "});"
        "</script>";
}

Надеюсь, эта помощь