我想在一些额外的代码中包装现有的click事件.
基本上我在手风琴中有一个多部分形式,我想触发手风琴标题点击的验证.手风琴代码在别处使用,我不想改变它.
这是我尝试过的:
//Take the click events off the accordion elements and wrap them to trigger validation
$('.accordion h1').each(function (index, value) {
var currentAccordion = $(value);
//Get reference to original click
var originalClick = currentAccordion.click;
//unbind original click
currentAccordion.unbind('click');
//bind new event
currentAccordion.click(function () {
//Trigger validation
if ($('#aspnetForm').valid()) {
current = parseInt($(this).next().find('.calculate-step').attr('data-step'));
//Call original click.
originalClick();
}
});
});
Run Code Online (Sandbox Code Playgroud)
jQuery抛出一个错误,因为它试图this.trigger在originalClick函数内部做,我不认为this是jQuery期望它.
编辑:更新的代码.这有效,但有点难看!
//Take the click events off the accordion elements and wrap them to trigger validation
$('.accordion h1').each(function (index, value) {
var currentAccordion = $(value);
var originalClick = currentAccordion.data("events")['click'][0].handler;
currentAccordion.unbind('click');
currentAccordion.click(function (e) {
if ($('#aspnetForm').valid()) {
current = parseInt($(this).next().find('.calculate-step').attr('data-step'));
$.proxy(originalClick, currentAccordion)(e);
}
});
});
Run Code Online (Sandbox Code Playgroud)
我认为这:
var originalClick = currentAccordion.click;
Run Code Online (Sandbox Code Playgroud)
实际上并没有按照您的想法进行 - 您正在捕获对 jQuery click 函数的引用,而不是您添加的事件处理程序,因此当您调用originalClick() 时,它相当于: $(value).click()
| 归档时间: |
|
| 查看次数: |
15607 次 |
| 最近记录: |