Есть ли способ изменить параметры события в jQuery? - PullRequest
4 голосов
/ 18 ноября 2010

Я хочу иметь возможность изменять параметры, передаваемые в стартовое событие выбираемого объекта, поэтому я могу, в основном, позволить своему пользователю использовать выбираемый эффект пользовательского интерфейса jQuery без необходимости удерживать клавишу CTRL.

JS

$(function() {
$( "#selectable" ).bind("mousedown", function(event, ui) {
    var result = $( "#select-result" ).empty();
    event.metaKey = event.ctrlKey = true;
});
$( "#selectable" ).selectable();
});

У меня есть скрипка с тем, что я пытаюсь сделать здесь:

http://jsfiddle.net/josephbulger/ZfevM/

Проблема, с которой я столкнулся, заключается в том, что когда я устанавливаю параметры события в методе start, метод stop не видит изменений, которые я делаю.

Есть ли способ выполнить то, что я пытаюсь сделать?

Ответы [ 3 ]

14 голосов
/ 18 ноября 2010

Вы не можете установить свойства здесь нет ... потому что это другой event объект в методе stop.Вы можете установить некоторые переменные с более высокой областью действия (, например ), но ни одна из них не сохранится в объекте event.Дело не в том, что они «очищают» их на самом деле, это просто новый шлепок нового объекта.


Чтобы сделать выборку вести себя так, как будто удерживается нажатой Ctrl , привязать к mousedown событие, которое используется раньше времени, и установите для свойства .metaKey значение event равное true, например:

$("#selectable").bind("mousedown", function(e) {
    e.metaKey = true;
}).selectable();

Вы можете проверить этоздесь , не забудьте найти до вызова .selectable(), так как обработчики событий выполняются в границах порядка.

5 голосов
/ 07 сентября 2011

Я обновил код.Посмотрите на этот URL.

http://jsfiddle.net/phoenix_suresh/7f6j5/

Тем временем я добавил атрибут ID к

элементам, чтобы вы могли иметь больше контроля над ним.
4 голосов
/ 02 июня 2015

После нахождения этого ответа я заметил, что вы можете использовать свойство originalEvent объекта event, возвращаемого в обработчике события selectable start, чтобы установить для свойства ctrlKey значение true.

LikeИтак:

$("#selectable").selectable({
    start: function (event, ui) {
        event.originalEvent.ctrlKey = true;
    }
});

Работает Скрипка

...