无法使用Javascript / Prototype访问以前由innerHTML创建的元素

时间:2010-12-23 12:18:31

标签: javascript html prototypejs

我正在使用来自ajax请求的内容设置div的innerHTML变量:

new Ajax.Request('/search/ajax/allakas/?ext_id='+extid,
  {
    method:'get',
    onSuccess: function(transport){
      var response = transport.responseText || "no response text";
      $('admincovers_content').innerHTML=response;
    },
    onFailure: function(){ alert('Something went wrong...') }
  });

回复文字包含一个表格:

    <form id="akas-admin" method="post" action="/search/ajax/modifyakas/">
        <input type="text" name="formfield" value="i am a form field"/>
    </form>

然后我调用一个应该提交该表单的函数:

$('akas-admin').request({
  onComplete: function(transport){ 
      //alert('Form data saved! '+transport.responseText)
        $('admincovers_content').innerHTML=transport.responseText;
      }
});

问题是$('akas-admin)返回null,我试图将带有此ID的表单放在原始文档中,该文档有效。

问题:我可以以某种方式“重新验证”使用innerHTML插入的dom或access元素吗?

编辑信息:document.getElementById("akas-admin").submit()工作正常,问题是我不想重新加载整个页面,而是将表单发布在ajax上并在回调函数中获取响应文本。

编辑:

根据提供的答案,我用以下观察者替换了我执行请求的函数:

Event.observe(document.body, 'click', function(event) {
  var e = Event.element(event);
  if ('aka-savelink' == e.identify()) {
      alert('savelink clicked!');
      if (el = e.findElement('#akas-admin')) {
        alert('found form to submit it has id: '+el.identify());
        el.request({
            onComplete: function(transport){ 
            alert('Form data saved! '+transport.responseText)
                $('admincovers_content').innerHTML=transport.responseText;
            }
        });
      }
  }
});

问题是我到alert('savelink clicked!'); 。 findelement不会返回表单。我试图将保存链接放在表单上方和下方。两者都不起作用。 我也认为这种做法有点笨拙,我做错了。有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:1)

因此$('akas-admin')会返回null,但document.getElementById("akas-admin")则不会。 $函数主要只是document.getElementById的包装器,所以它的分解是不常见的。您是否尝试过使用Element.extend(document.getElementById('akas-admin'))

您是否加载了其他库?您可以在jsFiddle中重新创建问题吗?

答案 1 :(得分:0)

尝试使用live;因为您的表单是在DOM加载后添加的。试试这个:

  

$( “#从Akas管理员”)。住( '请求',函数(){   //你的东西在这里})

希望这有帮助。

答案 2 :(得分:-1)

当你听到蹄节拍时,想想马不是斑马。你真的有一个id为'admincovers_content'的元素吗?