jQuery 忽略第一次点击?

jQuery first click ignored?

我将这段代码与jQueryUI

一起使用
function ViewClient(RelationID) {
    console.log('entering');
    $('a[id^="contact_show"]').on('click', function (e) {
        console.log('clicking '+RelationID);
        ShowClientInfo(RelationID);
        $('#accordion').accordion({active: 2});
    });
}

用户单击以执行操作的 link 看起来像这样(位于手风琴的面板 1 上):

<a href="#" id="contact_show_204" onclick="ViewClient(204);">View Client</a>

这应该会关闭面板 1,并打开面板 2。

手风琴初始化如下:

$( "#accordion" ).accordion({
    active: false,
    heightStyle: "Content",
    collapsible: true
});

当我点击其中一个ID时,第一次点击总是被忽略(不显示正确的手风琴)。它只在第二次和以后的点击中显示正确的手风琴。 DOM 在我第一次点击时已准备就绪。我不知道还有什么要检查的。有什么想法吗?

编辑:

我现在添加了 console.log 用于进入函数并单击 ViewClient() 函数的元素,发生的情况是每次单击时,我都会收到日志消息“进入”,但是单击仅适用于第二次单击。但奇怪的是,它似乎没有“重置”事件:

entering

entering
clicking 204
clicking 206

entering
clicking 204
clicking 206
clicking 206

entering
clicking 204
clicking 206
clicking 206
clicking 206

请注意,我第二次点击时,点击了不同的 ID (206)。但如果我也单击原始 ID (204),它会做同样的事情。我尝试返回 false 和 preventDefault()。在我看来像是延迟 DOM 更新?

您使用的语法用于初始化手风琴。要更改现有手风琴的设置,您必须使用 option 方法(或 options 如果您想一次更改多个设置)。

$("#accordion").accordion(); // initialize accordion
$('a[id^="contact_show"]').on('click', function (e) {
    ShowClientInfo(RelationID);
    $('#accordion').accordion("option", "active", 2); // change the active pane
});

您已将两个点击处理程序分配给同一元素。脚本中的那个和标记中的那个都在每次点击时触发。您需要单独初始化手风琴,并且您应该在 jQuery 单击处理程序中调用 ViewClient()