Вы можете передавать данные при запуске искусственного события, суть в том, что вы не можете использовать функции быстрого доступа, такие как click()
, но вместо этого использовать trigger
напрямую:
$("#mybutton").tigger('click', ['One', 'Two']);
Обработчик кликов:
$("#mybutton").click(function(ev, customArg1, customArg2) {
customArg1; // "One"
customArg2; // "Two"
})
Видя, как .click()
- это всего лишь ярлык для .trigger('click')
, в любом случае, вы ничего не потеряете, делая это таким образом, просто больше нажатий клавиш;)
Редактирование адресации комментариев :
система уже написана и является
достаточно большой, чтобы изменить все
скрипты
В этом случае вам может понадобиться взломать jQuery для захвата arguments.callee.caller
и передать его вашему обработчику:
jQuery.fn.click = function(fn) {
return fn ? this.bind(name, fn) : this.trigger(name, [arguments.callee.caller]);
};
С этим патчем код, который вызывает .click()
напрямую, теперь будет передавать информацию об области действия вызывающей функции вашему обработчику кликов, который теперь может сделать это:
$("#mybutton").click(function(ev, caller) {
if (caller === funOne || caller === funTwo){
//my code
}
});
Если то, что говорит о том, что является правдой, то arguments.callee.caller
не будет надежным в будущем, но тогда взлом называется взломом по причине;)