document.GetElementsByName在PHP类中回显时不起作用

时间:2018-04-08 06:28:26

标签: javascript php

我正在处理一个呈现图像拼贴的应用程序(专辑封面)。但是,每当我运行此代码时,更新功能都不会发送警报,因此我假设它找不到任何名称与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>";
}

2 个答案:

答案 0 :(得分: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>";
}

希望这个帮助

答案 1 :(得分:0)

原来问题是表单提交后没有任何元素被命名为“选中”。为了解决这个问题,我简单地添加了一个名为“selected”的隐藏输入,并将最后点击的按钮的id分配给它的值。

<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>

更新功能现在可以在我的机器上正常工作。