Начиная с jQuery 1.7, вы должны использовать jQuery.fn.on
:
$(staticAncestors).on(eventName, dynamicChild, function() {});
До этого рекомендуется использовать live()
:
$(selector).live( eventName, function(){} );
Однако live()
устарел в 1.7 в пользу on()
и полностью удален в 1.9. Подпись live()
:
$(selector).live( eventName, function(){} );
... может быть заменена следующей on()
сигнатурой:
$(document).on( eventName, selector, function(){} );
Например, если ваша страница динамически создавала элементы с именем класса dosomething
, вы привязывали бы событие к родительскому, который уже существует (здесь есть нуль проблемы, вам нужно что-то, что существует для привязки, не привязка к динамическому контенту), это может быть (и самый простой вариант) - document
. Хотя иметь в виду document
, возможно, не самый эффективный вариант .
$(document).on('mouseover mouseout', '.dosomething', function(){
// what you want to happen when mouseover and mouseout
// occurs on elements that match '.dosomething'
});
Любой родитель, который существует в момент привязки события, прекрасен. Например,
$('.buttons').on('click', 'button', function(){
// do something here
});
применимо к
Этот ответ полностью на Python, поэтому вы можете преобразовать его в MEL, если вы настаиваете на его использовании.
Задания сценария могут запускаться различными способами при возникновении события. Это могут быть такие вещи, как, когда время изменилось, пользователь отменяет действие, или в вашем случае, когда выбор изменился.
Вы можете получить полный список названий этих событий, выполнив следующее:
cmds.scriptJob(listEvents=True)
То, что вы ищете, это "SelectionChanged"
.
Чтобы это сработало, вам нужно определить функцию, которая будет вызываться при запуске задания скрипта (при изменении выбора). Вот простой пример этого.
import maya.cmds as cmds
# Create a function that will be called from the script job whenever there's a change to the selection.
def func():
print "The selection has changed!"
# Create a new script job and save the result to a variable. The result is the script job's id number.
script_job_id = cmds.scriptJob(event=["SelectionChanged", func])
# When it's no longer needed, pass the script job's id with the kill parameter to remove it.
#cmds.scriptJob(kill=script_job_id)
Таким образом, в вашем случае, когда вы запускаете функцию, она может проверить, выбран ли объект, и в зависимости от того, есть он или нет, вы можете заставить его закрасить кнопку.
Когда ваш инструмент закрывается, вы можете удалить задание сценария, используя его параметр kill
, чтобы он больше не работал, когда он вам не нужен.
И в качестве примечания, что вы написали Хагги, если у вас нет веских причин, я бы просто придерживался Python вместо MEL. Синтаксис намного проще, он имеет безумное количество библиотек, и он просто более силен для выполнения простых вещей, таких как манипулирование строками. Плюс Python используется во многих других программах, MEL - нет. Это правда, что есть некоторые команды, которые могут быть выполнены только в MEL, но вы можете легко оценить строку MEL с помощью Python.