2013-06-07 2 views
0

Я хочу добавить класс «selected» при нажатии на div. Проблема в том, что если я нажимаю на div, у которого есть родительский div. родитель получает выбранный, а не дочерний div, который я хочу выбрать.Добавить класс в объект на mousedown

Я хочу, чтобы иметь возможность щелкнуть родительский div без выбора дочернего div и щелкнуть дочерний div без каких-либо родителей, которые выбирают div. Только 1 div должен иметь выбранный класс одновременно. Дивы также изменяются и перетаскиваются.

$("#wrapper").delegate('div:not(".ui-resizable-handle")', 'mousedown', function() { 
     $(".drag").removeClass('selected'); 
     $(this).addClass('selected'); 

    }); 

Демонстрация: http://jsfiddle.net/6wYRF/3/ ... Любые идеи?

ответ

3

Это происходит из-за распространения событий, предотвратить его возвращение false из обработчика события

$(".drag").draggable(); 
$(".drag").resizable(); 

$("#wrapper").delegate('div:not(".ui-resizable-handle")', 'mousedown', function() { 
    $(".drag").removeClass('selected'); 
    $(this).addClass('selected'); 
    return false; 
}); 

Демо: Fiddle

+0

Пока вы правы в отношении распространения событий, ваша скрипка по-прежнему выделяет внешний div. Либо измените #wrapper на .drag, либо используйте e.target, как ответ pXL. – LouD

+0

@LouD извините исправлено, была обновленная версия –

1
$(".drag").draggable(); 
$(".drag").resizable(); 

$("#wrapper").delegate('div:not(".ui-resizable-handle")', 'mousedown', function (e) { 
    $(".drag").removeClass('selected'); 
    if ($(e.target).is('.drag')) { 
     $(e.target).addClass('selected'); 
    } 
}); 

Demo --->http://jsfiddle.net/6wYRF/7/

0

Каждое событие передать объект как параметр для обратного вызова; этот объект имеет свойство target, которое является текущим элементом, на котором генерируется событие.

$("#wrapper").delegate('div:not(".ui-resizable-handle")', 'mousedown', function(evt) { 
    $(".drag").removeClass('selected'); 
    $(evt.target).addClass('selected'); 

}); 
Смежные вопросы