JQuery mobile: событие касания элемента списка также запускает событие скрытого объекта - PullRequest
3 голосов
/ 03 июля 2011

У меня проблема с событием касания динамически генерируемого списка. Когда я выбираю первый элемент в списке, действия - это пожары, один из которых - показать объект рядом. Проблема в том, что в это время также происходит событие касания невидимого объекта. Я не имею большого опыта в программировании, но я занимаюсь тестированием программного обеспечения, поэтому вы можете ожидать тщательных шагов репликации. :)

Это событие, которое срабатывает при выборе любого элемента списка:

//When a list item is selected
    $('#showItems').delegate('li', 'tap', function () {
        if ($('#showItems').hasClass("courses")){
            courseNum = $(this).find('.course').text();
            var profArr=new Array();
            profArr[0]="";
            profArr[1]="";
            ajax_get_textbooks(courseNum, profArr[1], profArr[0]);
            $('#showItems').removeClass('profs courses booksProf eitems').addClass('books');
        }
        else if ($('#showItems').hasClass("profs")){
            prof = $(this).text();
            profArr = prof.split(", ");
            ajax_get_textbooks(courseNum, profArr[1], profArr[0]);
            $('#showItems').removeClass('profs courses books eitems').addClass('booksProf');
        }
        $('#filters').removeClass('hidden'); // this is the object that gets acted upon incorrectly
    });

И это событие также запускается, когда выбран элемент списка first :

//When filter by professor/e-resources is selected
 $('.filterBtn').bind('tap',function(event){
    var filter = $(this).text();
    filter = filter.toLowerCase();
    if (filter.indexOf("prof") !== -1 ) {
        ajax_filter_professor(courseNum);
        $('#showItems').removeClass('books courses booksProf eitems').addClass('profs');
    }
    else {
        ajax_filter_eresources(courseNum);  
        $('#showItems').removeClass('books profs booksProf courses').addClass('eitems');
    }
    $('#showItems').listview('refresh');
});

Я думал, что смогу обойти эту проблему, прикрепив событие taphold к той же функции, но следующая строка не работает:

$('#showItems').delegate('li', 'tap taphold', function () {

Это работает только тогда, когда я копирую тот же код в новый триггер события для прикосновения.

Я бы хотел как-то отключить привязку $ ('. FilterBtn'). До тех пор, пока не закончится обновление первого списка, но не могу понять, как это сделать.

Вот шагов репликации

  1. http://library.iit.edu/mbad/#textbooks Введите "Ху" в текстовом поле. Список курсов пропогатов.
  2. Выберите первый элемент списка (HUM102).
  3. Обратите внимание, что ваша мышь теперь находится над одной из двух кнопок: «Проф» или «Е-предметы». Если бы вы тестировали это на телефоне, то одно из этих событий кнопок также сработало бы.

Может кто-нибудь помочь мне понять, что я делаю не так?

1 Ответ

0 голосов
/ 20 ноября 2012

Может быть, вы можете попробовать использовать событие vclick JQM.См. Список поддерживаемых событий в JQM на http://jquerymobile.com/test/docs/api/events.html Если это не Vclick, может подойти что-то еще.

...