2016-08-03 2 views
0

Мне нужно быстрое исправление проблемы с сборкой - в основном создание fe показывает красиво разработанную кнопку для загрузки Dropbox - наш разработчик реализовал API, введя логотип Dropbox в красиво оформленный html и оставив меня чтобы разобраться - это в основном выглядит так -Javascript - trigger click

enter image description here

скомпилированный код выглядит следующим образом -

<li> 
     <a href="#" id="db-link" class="button"> 
      <i class="icon-dropbox" id="dropbox_upload"> 
     <a href="#" class=" dropbox-dropin-btn dropbox-dropin-default"><span class="dropin-btn-status"></span>Choose from Dropbox</a></i> 
      <span>Select from Dropbox</span> 
     </a> 
    </li> 

как быстро исправить - мой подход, чтобы скрыть идентификации контента-DROPIN-BTN ссылки с помощью быстрых немного CSS -

.dropbox-dropin-btn{ 
    position:absolute; 
    top:-10000px; 
} 

и использовать JavaScript для запуска нажмите на ссылку Dropbox, когда Дэ стиль ссылки щелкнула - (Jquery ISNT используется в этом проекте) - Я признаю, что я нету используется vaniall JavaScript в то время - но Ive написал этот код -

document.getElementById("db-link").addEventListener("click", function(e) { 

    var l = document.getElementsByClassName("dropbox-dropin-btn"); 

    l.click(); 
    e.preventDefault(); 
}); 

КОТОРЫХ не работает - все, что я получаю ошибку «TypeError: getelementbyid равна нулю»

Может кто-нибудь посоветовать whts Going Wrong - или предложение лучшее полное решение для этого сценария?

Благодаря

+2

Я полагаю, что ссылка на Dropbox находится в iframe, или ваш javascript работает до того, как ссылка была добавлена ​​в DOM, трудно сказать без дополнительной информации. –

+0

Элемент db-link также создается динамически? возможно, вы пытаетесь добавить прослушиватель событий, когда элемент еще не существует в DOM, например @RobM. говорит. – tenhsor

ответ

1

document.getElementsByClassName("dropbox-dropin-btn") возвращает массив элементов. поэтому вам нужно вынуть первый элемент

Поскольку div с id db-link исходит из бэкэнда, сначала это не будет видно. поэтому javascript не сможет этого найти. Так что продолжайте проверять, что видно или нет.

var counter = 0; 
setInterval(function(){ 
    if(document.getElementById("db-link") && counter < 1){ 
    document.getElementById("db-link").addEventListener("click",function(e) { 

     var l = document.getElementsByClassName("dropbox-dropin-btn"); 

     l[0].click(); 
     counter += 1; 
     e.preventDefault(); 
    }); 
    } 

}, 10) 
+0

Хотя это правильно, и это было бы проблемой, если бы его код дошел до этой точки, он не совпадает с ошибкой, что 'document.getElementById (" db-link ")' возвращает значение null. –

+0

@KyleFalconer обновлен –

+0

спасибо @SyamPillai - выше выдает следующую ошибку при щелчке - (так что, по крайней мере, это срабатывание, я думаю) - SyntaxError: ожидаемое выражение, got ')' – Dancer

0

Выстрел в темноте здесь, но, возможно, вам нужно поставить яваскрипта код в нижней части вашего тела, таким образом документ загружается при выполнении. Возможно, вы захотите увидеть this question, чтобы сделать это правильно в чистой среде javascript.