2013-09-10 2 views
0

Учитывая следующий HTML:Greasemonkey скрипт, кажется, выполнить строки из строя

<table class="cat_list"> 
<tr> 
    <td> 
     <input type="checkbox" name="filter_cat[1]" id="cat_1" value="1"/> 
     <label for="cat_1">Music</label> 
    </td> 
    <td> 
     <input type="checkbox" name="filter_cat[2]" id="cat_2" value="1"/> 
     <label for="cat_2">Applications</label> 
    </td> 
    <td> 
     <input type="checkbox" name="filter_cat[3]" id="cat_3" value="1"/> 
     <label for="cat_3">E-Books</label> 
    </td> 
    <td> 
     <input type="checkbox" name="filter_cat[4]" id="cat_4" value="1"/> 
     <label for="cat_4">Audiobooks</label> 
    </td> 
    <td> 
     <input type="checkbox" name="filter_cat[5]" id="cat_5" value="1"/> 
     <label for="cat_5">E-Learning Videos</label> 
    </td> 
    <td> 
     <input type="checkbox" name="filter_cat[6]" id="cat_6" value="1"/> 
     <label for="cat_6">Magazines</label> 
    </td> 
    <td> 
     <input type="checkbox" name="filter_cat[7]" id="cat_7" value="1"/> 
     <label for="cat_7">Comics</label> 
    </td> 
</tr> 

Следующий скрипт должен снять все флажки в строке таблицы, а затем проверить один конкретный один с идентификатором cat_1.

$(".cat_list input[type='checkbox']").attr("checked",false); 

$("#cat_1").attr("checked",true); 

В Greasemonkey он проверяет одну коробку на миллисекунду, а затем отменяет все флажки. Вторая команда одна. Проверяйте поле cat_1 при выполнении в одиночку, но когда вы добавляете линию над ней, все они не проверяются после ...

Итак, что-то неправильно выполняет Greasemonkey или что? похоже, что он запускает скрипт назад или есть проблема с синхронизацией, например, он запускает unchecks async, а затем завершает проверку до того, как будет отменен контроль.

+0

Какую версию jQuery вы используете? Также опубликуйте свой полный скрипт. В этом случае заголовки могут иметь решающее значение. –

ответ

0

Попробуйте это ..

setTimeout(function(){$("#cat_1").attr("checked",true);},0); 

Если это состояние гонки какой-то это поставит вашу команду в нижней части стека.

1

Возможно, это your script's jQuery and the page are conflicting. Простой @grant GM_addStyle может это исправить. Опубликуйте свой полный сценарий.


В противном случае , что JQuery код работает синхронно. Javascript страницы вмешивается в то, что вы пытаетесь сделать, или что-то из этого вопроса было опущено.

Возможно, ваш сценарий стреляет до того, как страница будет сделана сама. Если хотите, связывайтесь с фактической целевой страницей.

Проанализируйте javascript страницы, который действует на этих входах, и рассмотрите возможность использования собственной JS страницы для внесения изменений. На странице могут потребоваться/ожидать состояния, которые будут установлены, а не только переключаемые флажки.

Используйте JS по адресу script injection или через unsafeWindow.


Использование таймера, как и в ответе Псюониса, может оказаться достаточным. Может не. Но, достаточно легко попробовать. Я бы использовал более длинный интервал:

$(".cat_list input[type='checkbox']").attr ("checked", false); 

//-- Give the page's JS time to react and settle. 
setTimeout (function() { $("#cat_1").attr ("checked", true); }, 100); 
Смежные вопросы