我试图用一些onclick事件和条件用jquery语句执行一些警报.但似乎事件处理程序无法正常工作,可能是因为我的事件处理逻辑中遗漏了一些事实.我只有一个按钮,ID为#bottone1,我有一些id #b1和#的菜单按钮b2.
第一个事件工作正常,它正确地添加了类" cliccatoInvoca1_OnReady".当我点击#bottone1它时,启动第一个警报" cliccatoInvoca1_OnReady".onClick事件也$("#b1")正常,它删除了类" cliccatoInvoca1_OnReady"并替换为类" cliccatoInvoca1".
当我点击#bottone1它时,就像第一个警报" cliccatoInvoca1_OnReady",然后是"cliccatoInvoca1".然后,当我点击它#b2,然后我点击#bottone1它执行3警报," cliccatoInvoca1_OnReady"," cliccatoInvoca1",最后" cliccatoInvoca3".
因此,主要问题是,如果条件仅执行1次警报,则它不起作用.所以当我点击#时,bottone1它会按顺序执行所有警报.
$(document).ready(function () {
$("#select-1").multiselect();
invoca1();
$("#bottone1").addClass("cliccatoInvoca1_OnReady btn btn-default");
if ($("#bottone1").hasClass("cliccatoInvoca1_OnReady")) {
$("#bottone1").click(function () {
alert("cliccatoInvoca1_OnReady");
keys = [];
$('input[name="multiselect_select-1"]:checked').each(function () {
keys.push(this.value);
});
});
}
$("#b1").click(function () {
invoca1();
$("#bottone1").removeClass("cliccatoInvoca1_OnReady noClass").addClass("cliccatoInvoca1");
if ($("#bottone1").hasClass("cliccatoInvoca1")) {
$("#bottone1").click(function () {
alert("cliccatoInvoca1");
keys = [];
$('input[name="multiselect_select-1"]:checked').each(function () {
keys.push(this.value);
});
});
}
});
$("#b2").click(function () {
invoca3();
$("#bottone1").removeClass("cliccatoInvoca1").addClass("cliccatoInvoca3");
if ($("#bottone1").hasClass("cliccatoInvoca3")) {
$("#bottone1").click(function () {
alert("cliccatoInvoca3");
keys = [];
$('input[name="multiselect_select-1"]:checked').each(function () {
keys.push(this.value);
});
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
更改为使用委托事件处理程序,附加到不变的祖先元素,每个元素都有一个匹配的选择器:
像这样:
$(document).on('click', "#bottone1.cliccatoInvoca1_OnReady", function() {
alert("cliccatoInvoca1_OnReady");
keys = [];
$('input[name="multiselect_select-1"]:checked').each(function () {
keys.push(this.value);
});
});
Run Code Online (Sandbox Code Playgroud)
现在上面是一个单击处理程序所需的全部内容,重复其可以拥有的其他类的模式.你永远不需要hasClass检查.
你的其他代码变得如此简单:
$("#b1").click(function () {
invoca1();
$("#bottone1").removeClass("cliccatoInvoca1_OnReady noClass").addClass("cliccatoInvoca1");
});
Run Code Online (Sandbox Code Playgroud)
click)来冒泡到祖先元素.document如果没有其他更接近/方便的话,则是默认值.不要使用,'body'因为它有一个与样式相关的错误,可能导致鼠标事件不起泡.此模式将显着简化您的代码.
整个例子将变成这样的:
$(document).ready(function () {
$("#select-1").multiselect();
invoca1();
$("#bottone1").addClass("cliccatoInvoca1_OnReady btn btn-default");
$("#b1").click(function () {
invoca1();
$("#bottone1").removeClass("cliccatoInvoca1_OnReady noClass").addClass("cliccatoInvoca1");
});
$("#b2").click(function () {
invoca3();
$("#bottone1").removeClass("cliccatoInvoca1").addClass("cliccatoInvoca3");
});
$(document).on('click', "#bottone1.cliccatoInvoca1", function () {
alert("cliccatoInvoca1");
keys = [];
$('input[name="multiselect_select-1"]:checked').each(function () {
keys.push(this.value);
});
});
$(document).on('click', "#bottone1.cliccatoInvoca3", function () {
alert("cliccatoInvoca3");
keys = [];
$('input[name="multiselect_select-1"]:checked').each(function () {
keys.push(this.value);
});
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
681 次 |
| 最近记录: |