2017-01-02 10 views
2

Я пишу код Tampermonkey для веб-страницы, как ConverTo:
Он должен автоматически выбрать второй вариант в раскрывающемся списке:Tampermonkey, чтобы выбрать выпадающее значение. У него нет идентификатора или имени, просто класс?

<select class="format-select"> 
    <option value="mp3">MP3</option> 
    <option value="mp4">MP4 (video)</option> 
</select> 

, через несколько секунд после полной загрузки страницы.
Но ничего не происходит.

Мой код:

...... 
// @match  https://www.converto.io/* 
// @require http://code.jquery.com/jquery-1.11.0.min.js 
// ==/UserScript== 

$(document).ready(function(){ 
setTimout(test(),10000); 
function test() 
{ 
    $(".format-select").val('mp4'); 
} 
})(); 

Пожалуйста, помогите!

ответ

2

См. Choosing and activating the right controls on an AJAX-driven site.
Многие управляемые AJAX элементы управления не могут быть изменены; они также должны получать ключевые события, чтобы страница задала желаемое состояние.

В Converto случае, что выбрать, как представляется, ожидать :

  1. Клик событий.
  2. Изменение стоимости.
  3. Изменение события.

Вы бы отправить эту последовательность с кодом, как этот полный, рабочий сценарий:

// ==UserScript== 
// @name  _ConverTo, Automatically select mp4 
// @match https://www.converto.io/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js 
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js 
// @grant GM_addStyle 
// ==/UserScript== 
//- The @grant directive is needed to restore the proper sandbox. 

waitForKeyElements (".format-select:has(option[value=mp4])", selectFinickyDropdown); 

function selectFinickyDropdown (jNode) { 
    var evt = new Event ("click"); 
    jNode[0].dispatchEvent (evt); 

    jNode.val('mp4'); 

    evt = new Event ("change"); 
    jNode[0].dispatchEvent (evt); 
} 

Есть другое состояние последовательности можно, к тому же концу.

+0

Прекрасно работает и благодарит, сэр. Теперь я хочу, чтобы он нажал кнопку «CONVERT», но я ничего не узнал об ajax, поэтому я мог только дать ему случайную попытку подражать вашему коду --- waitForKeyElements («.btn lg btn-default convert-btn» , ....... {var evt = new Событие ("click"); jNode [0] .dispatchEvent (evt);} Это не работает. Любая идея? – user2650501

+0

Это не так, как работает переполнение стека. 1 вопрос, на вопрос. И последующие вопросы, в комментариях, не должны «перемещать стойки ворот». Не будьте [Помощником вампира] (http://meta.stackoverflow.com/a/258279/331508) ... [Примите этот ответ] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235), а затем отпустите его, а затем задайте свой дополнительный вопрос как новый вопрос, но будьте предупреждены, что 1-я ссылка в ответе уже показывает, как цепляться за активацию активации. Прочитайте и попытайтесь применить этот связанный ответ, прежде чем снова спрашивать. –

+0

Хорошо и жаль, и еще раз спасибо. – user2650501

Смежные вопросы