Не могу получить доступ к элементам, ранее созданным innerHTML с Javascript / Prototype - PullRequest
2 голосов
/ 23 декабря 2010

Я устанавливаю переменную innerHTML для div с содержимым из запроса ajax:

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, я попытался поместить форму с этим идентификатором в исходный документ, который работает.

Вопрос:Могу ли я как-то «переоценить» dom или элементы доступа, которые были вставлены с помощью innerHTML?

Редактировать информацию: 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 ]

1 голос
/ 31 декабря 2010

То есть $('akas-admin') возвращает null, а document.getElementById("akas-admin") - нет. Функция $ - это, в основном, просто обертка для document.getElementById, так что это непривычно. Вы пробовали использовать Element.extend(document.getElementById('akas-admin'))?

У вас есть другие загруженные библиотеки? Можете ли вы воссоздать проблему в jsFiddle ?

0 голосов
/ 31 декабря 2010

Когда вы слышите удары копытами, думайте, что лошади не зебры. У вас есть элемент с идентификатором admincovers_content?

0 голосов
/ 23 декабря 2010

Попробуйте использовать live ; так как ваша форма добавляется после загрузки DOM. Попробуйте это:

$ ( "# Akas-администратора"). Жить ( 'запрос', функция () { // Делай свои вещи здесь})

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...