Триггер нажмите один за другим вниз по списку - плюс переключить все - PullRequest
0 голосов
/ 20 марта 2012

Вот FIDDLE , с которым вы можете разветвляться и работать

При наличии списка

<a href="#" class="iconList" id="myDoc_aaa">...</a>
<a href="#" class="iconListChecked" id="myDoc_bbb">...</a>
<a href="#" class="iconList" id="myDoc_ccc">...</a>

Я хочу назначить клавишу *, чтобы вызвать нажатие на каждомссылка в свою очередь и Ctrl- *, чтобы вызвать щелчок на всех.Я не хочу переключать класс, так как есть сценарий, который должен запускаться при нажатии на ссылку

ВОПРОС: Можете ли вы помочь мне с селекторами и что еще (атрибут данных?) цикл по ссылкам по одной на * и все сразу на ctrl-star

Поэтому, когда вы

нажимаете *, срабатывает первая ссылка (и скрипт изменяеткласс в iconListChecked),

снова нажмите * звездочку, и вторая ссылка сработает (снимите флажок),

нажмите *, а третья сработает,

нажмите *, и мыwrap и первый срабатывает (снимая флажок)


нажмите Ctrl-Star и все не проверенные ссылки сработают

FIXED : $(".iconList").trigger("click");


(Моя скрипка в настоящее время обрабатывает только * на цифровой клавиатуре - у меня есть отдельный вопрос для этого здесь )

Ответы [ 2 ]

1 голос
/ 24 марта 2012

http://jsfiddle.net/GtXMW/28/

// ... removed unedited part..

// Function to handle *
function toggleFirst() {
    var $candidates = $('.iconList,.iconListChecked');
    var $nottoggled = $candidates.not('.rw_toggled').first();
    if (!$nottoggled.length) {
        // There is no non-toggled element any more.
        // Remove class from all links
        $candidates.removeClass('rw_toggled');
        $nottoggled = $candidates.first();
    }
    // Add temporary class, trigger click
    $nottoggled.addClass('rw_toggled').click();
    console.log("*");
}
// Function to handle ctrl+*
function toggleAll() {
    console.log("ctrl+*");
    $(".iconList").click();
}    
$(document).ready(function() {
    // Handle Ctrl+* and * 
    $(document).keypress(function(e) {
        var $this = $(this);
        if (e.which === 42) { // '*'.charCodeAt(0) === 42
            if (!$this.data('rw_star_pressed')) {
                $this.data('rw_star_pressed', true);
                if (e.ctrlKey) { // Ctrl + *
                    toggleAll();
                } else {             // Just *
                    toggleFirst();
                }
            }
        }
    }).keyup(function() {
        $(this).removeData('rw_star_pressed');
    });

    // ... rest of your original code...
});
1 голос
/ 23 марта 2012

Видя, как вы решили часть этого самостоятельно, я считаю, что это должно помочь с остальными: http://jsfiddle.net/D4PhQ/4/

Используя класс next, он отслеживает следующее нажатие, а затем использует.next() для поиска следующего a элемента на странице.

function toggleFirst() {
    console.log("*");
    var n = $(".next").first();
    n.click();
    n.removeClass("next");
    n.nextAll("a").addClass("next");
    if (n.nextAll("a").length === 0) $("a").addClass("next");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...