jQuery UI, поддающийся сортировке ('отмена') - this.helper, является пустым

Я пытаюсь отключить поддающийся сортировке элемент от сортировки, когда по ней дважды щелкнули. Когда я пытаюсь отключить его, даже без условия, это дает мне, ошибка 'this.helper является пустой'.

$('.roundedBox:first', division).sortable({
    start: function( event, ui ) {
        if( true === true ) {
            $(this).sortable('cancel');
        }

        $(this).parent().data( 'sorting', true ); 
    },
    stop: function() { 
        $(this).parent().data( 'sorting', false ); 
    },
    items: '.department',
    update: function() {},
    placeholder: 'department-placeholder'
})

Какие-либо идеи о том, как я могу сделать это? Мне не нужен он, чтобы быть этим методом. Буквально что-либо вещь, которая останавливает его, будет работать.

Проблема, сортировка запускается на одиночном нажатии, но у меня есть другое действие, обязанное дважды щелкнуть. Если по этому дважды щелкают, я не хочу, чтобы это перетащило.


Править

После дальнейшего расследования, зажженного Russ C (спасибо), я обнаружил, что проблема не находится в самом поддающемся сортировке, а в сочетании с двумя другими плагинами:

jEditable (http://www.appelsiini.net/projects/jeditable) Контекстное меню jQuery (http://abeautifulsite.net/2008/09/jquery-context-menu-plugin/)

Последний - то, что на самом деле вызывает проблему. Поскольку jEditable h3 тег в поддающемся сортировке div, то, которое в свою очередь является в подразделении, которое имеет Контекстное меню jQuery, которому я верю, делает что-то для остановки распространения (без этого последнего плагина, все хорошо работает).

Для репродуцирования проблемы, следующее необходимо:

HTML

Test

Menu

jQuery

// Add context menu to menu icon
$('.division').contextMenu({
    menu: 'uDivisionMenu'
}, function(){} );

// Add Sorting
$('.roundedBox').sortable({
    start: function( event, ui ) {
        //$(this).parent().data( 'sorting', true ); 
    },
    stop: function() { 
        //$(this).parent().data( 'sorting', false ); 
    },
    items: '.department',
    update: function() {},
    placeholder: 'department-placeholder'
});


// Make the division names editable
$('.department h3').editable( '/ajax/save-department-name.php', {
    indicator   :   'Saving...',
    tooltip     :   'Double click to edit...',
    event       :   'dblclick'
});

// Add context menu to menu icon
$('.department a.menu').contextMenu({
    menu: 'uDepartmentMenu', 
    leftButton: true
}, function(){} );

// Make the departments show remove icon when you hover it
$('.department').live( 'mouseover', function() {
    $( '.hover-icon', $(this) ).show();
}).live( 'mouseout', function() {
    $( '.hover-icon', $(this) ).hide();
});

Вы видите пример тестирования здесь (ссылка будет удалена позднее): http://www.realstatistics.com/testing/

Если Вы удаляете этот раздел из кода jQuery, все работы хорошо:

// Add context menu to menu icon
$('.division').contextMenu({
    menu: 'uDivisionMenu'
}, function(){} );

Я продолжу искать проблему на данный момент.


ОБНОВЛЕНИЕ

Я решил эту проблему. Если кто-либо сталкивается с этой проблемой в будущем, я изменил contextMenu плагин для пропуска его проверки, если цель была на ".department" классе. Прямо после функции "mouseup", добавьте проверку, которая проверяет цель события, как следующее:

$(this).mouseup( function(e) {
    if( !$(e.target).hasClass('department') && !$(e.target).parent().hasClass('department') ) {

1
задан T J 1 July 2016 в 07:21
поделиться

1 ответ

Можете ли вы попробовать добавить задержку: 500 в список сортируемых параметров, возможно, эта задержка может правильно вызвать всплывающее окно двойного щелчка?

Точно так же вы можете использовать расстояние: 30, которое укажет sortable не начинать работу до тех пор, пока перетащите прошло 30 пикселей или более. это можно использовать, чтобы убедиться, что события щелчка работают.

2
ответ дан 3 September 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: