Выбранный jQuery плагин: не слушает сенсорное событие в iPad

Я использую плагин jQuery-выбран для выпадающего списка, все отлично работает с рабочим столом, но в iPad, когда я пытался отменить выбор выбранной опции касанием (событие щелчка мыши работает нормально), он не слушает касание событие (хотя я написал событие "touchend").

какое событие я должен использовать, чтобы сделать эту работу?

3 ответа

Самый простой и элегантный способ решить эту проблему - просто вызвать событие CLICK из события TOUCH с помощью modernizr.

$.getScript('/js/modernizr-custom.js', function() {

    if (Modernizr && Modernizr.touchevents) {
        $('.chosen-choices').on('touchend', '.search-choice-close', function(){
            $(this).trigger('click');
       });  
    }
});

Ответ Холова будет работать для существующих тегов, но не для вновь созданных тегов. Вы можете попробовать это: (не эффективно, но работает)

 //Fix the remove item on touch devices
if (Modernizr && Modernizr.touch) {
    $('.chosen-choices').on('touchend', '.search-choice-close', function(){
        var $this = $(this);
        var $select = $this.closest('.chosen-container').prev('select');
        var toRemove = $.trim($this.parent().text());
        var vals = $select.val();
        vals = $.grep(vals, function(value) {
            return $.trim(value).trim() !== toRemove;
        });
        $select.val(vals).trigger('chosen:updated');
   });
}

Плагин jQuery Chosen на самом деле имеет эту ошибку.

Протестировал этот код в консоли http://harvesthq.github.io/chosen/ Работает

var x = document.getElementsByClassName("search-choice-close");
//search-choice-close is class of X button.
for (var i = 0; i < x.length; i++) {
    x[i].addEventListener('touchend', function(e) {
       this.parentNode.remove()
    }, false);
}

Есть 2 проблемы 1- кнопка удаления не работает 2- при нажатии на добавление меню не открывается после добавления первого пункта:

Просто взломайте его, используя:

1- добавить слушателя, чтобы проверить, когда ваше раскрывающееся меню изменилось:

$(".chosen-select").chosen().change(updateChosen);

2- создать функцию, как это сделал я для ее обработки:

function updateChosen(){
        $(".search-choice-close").on("touchend", function () {
        $(this).trigger("click");
    });
    //Open Menu again 
    $(".chosen-choices").on("touchend", function(){
        $(this).find(".chosen-search-input").blur().focus();
    });
}

С Днем взлома:)

Другие вопросы по тегам