【发布时间】:2013-02-02 20:38:46
【问题描述】:
已经阅读并多次被“告知”使用live 而不是on 我正在将我的所有代码移至on...并且遇到了很多麻烦!
我已经克服了大部分,但是今天我遇到了一个非常奇怪的问题。
我有一个问题/答案公告板的东西,其中显示了消息标题,但在单击标题时会动态加载内容,HTML 是
<div class="headerRow" id="header_<%# Eval("headerId")%>">
<span class="delete" id="delete_<%# Eval("msgId")%>"></span>
<span class="markClosed" id="close_<%# Eval("headerId")%>"></span>
<span id="view_<%# Eval("msgId")%>" class="openCurrent">
<span class="customerData userCol">
<span class="qName"><%# Eval("customerName")%></span>
<span class="qEmail">(<%# Eval("email")%>)</span>
</span>
<span class="subjectCol"><%# Eval("subject")%></span>
<span class="timeCol"><%# Eval("dateTime")%></span>
</span>
<span class="reply" id="reply_<%# Eval("msgId")%>"> Reply </span>
</div>
所以我们有一个headerRow 容器,其中有一些用于关闭或删除消息线程的按钮,然后是一个包含消息详细信息、用户名、电子邮件主题的span,然后是一个按钮来按下打开回复表单。
openCurrent 类的 span 有一个 jQuery 绑定,如下所示:
$('body').on('click', '.openCurrent', function (e) {
var msgid = extractNumbers($(this).attr('id')); // sub function to pull the message ID from the element ID
if ($('#content_' + msgid).html() == '') {
$(but).addClass('centreLoader');
getMsgContent(msgid, 'absolute', function (result) {
// getMsgContent is an AJAX call returning the message
$('#content_' + msgid).html(result).slideToggle();
});
} else {
$('#content_' + msgid).slideToggle();
};
});
现在,这在我的 PC 上完美运行,但在 iPad 上不可靠。
它有时会起作用,但我无法弄清楚它为什么/何时起作用。
我最初确实将on 绑定看起来像这样:
$('.headerRow').on('click', '.openCurrent', function (e).....
但在阅读了移动版 Safari 中的一个错误后,请点击此处:
jQuery .on() and .delegate() doesn't work on iPad
我将其更改为身体,但对行为没有影响。
我之前也注意到,除非元素具有 CSS cursor:pointer,否则移动版 Safari 不会触发 click 事件,在这种情况下,我已经有了它,因为它在桌面 GUI 上具有视觉意义。
有人有什么想法吗?
编辑:
它在 iPad 上的 Chrome 中也不起作用!
附加编辑:
我也尝试将点击事件绑定到headerRow 元素,但遇到了同样的问题
【问题讨论】:
-
您是否尝试过将事件委托给
document? -
链接的问题实际上是说冒泡到身体不起作用
-
抱歉,这里引用了自己的错误,但是,是的,我已经尝试过
document我仍然无法让点击在 iPad 上可靠地工作,奇怪的是,它有时确实有效跨度> -
啊!!!问题与元素上的 CSS 过渡有关……现在我必须弄清楚如何仅在 iPad 上禁用它们!
-
不,不是,是 CSS
hover我已经破解了...查看答案
标签: jquery ipad jquery-click-event jquery-on