2013-04-29 2 views
0

У меня есть серия ячеек, которые при нажатии на нее клонируются и присоединяются к отдельной таблице (одной строки). Когда в эту вторую таблицу нажимают ячейки, они возвращаются туда, где они находились в предыдущей таблице (или, скорее, они удаляются, а исходная ячейка fadesTo сплошная. Однако мне нужны ячейки в этой второй таблице (#answertable - .sortable(). перемещать их найти, но как только я отпускаю, оригинал на функции мыши запускается на выполнение и клетка исчезаетJQuery/Javascript Нажмите и удерживайте

Answertable сортировкой код:.

$(function() { 
    $("#answertable tr").sortable(); 
    $("#answertable tr").disableSelection(); 
}); 

Соответствующие ячейки код (fadeOut() бит на самом деле) :

$(answertablecells).click(function(){ 
    var num = $(this).attr("id"); 
    for(var i=12; i < num.length; i++) { 
     var nums = num.substr(i, i++, i++); 
    }    
    $('#in_answerbox' + nums + "a").fadeTo('fast', 1).removeAttr('id'); 
    $(this).fadeOut('slow').removeAttr('id').remove(); 
}); 

Мне нужно все вышеперечисленное для запуска, когда вы нажимаете на него, но не тогда, когда вы сортируетесь. В основном я хочу, чтобы трюк отменил событие on click, но не сортируемое событие.

Любые предложения? Вся помощь ценится!

ответ

1

Вы можете рассчитать продолжительность мыши и вызвать функцию затухания, если длительность меньше некоторого значения (т.е. 250мс):

function myfunction(){ 
    var num = $(this).attr("id"); 
    for(var i=12; i < num.length; i++) { 
     var nums = num.substr(i, i++, i++); 
    }    
    $('#in_answerbox' + nums + "a").fadeTo('fast', 1).removeAttr('id'); 
    $(this).fadeOut('slow').removeAttr('id').remove(); 
} 

var longpress = false, startTime, endTime; 

$(answertablecells).on('click', function (e) { 
    if (!longpress) myfunction(); 
}); 

$(answertablecells).on('mousedown', function() { 
    startTime = new Date().getTime(); 
}); 

$(answertablecells).on('mouseup', function() { 
    endTime = new Date().getTime(); 
    longpress = (endTime - startTime < 250) ? false: true; 
}); 

jsfiddle

+0

Perfect. С небольшим контекстным редактированием это теперь работает. Спасибо за jsfiddle. Мне было интересно, может быть, если в этом контексте можно использовать setTimeout()? – Truvia

+0

yup, он должен работать нормально, вы можете добавить его после 'if (! Longpress) {', если вы хотите, чтобы он исполнялся после longpress или добавлял его после 'else {', который должен быть выполнен после короткого нажатия, т.е. 'if (! Longpress) { сделать что-то после shortpress} else {сделать что-то еще после longpress} ' – razzak

Смежные вопросы