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