我想在用户点击标签时尝试做点什么。
<label class="my-label"> ....
我正在尝试触发click事件 它正在开发chrome和safari但不适用于IE 11。
$(".my-label").click(function(){
});
我试过,绑定,活着,但没有成功。
请帮我解决这个问题。 花了2天时间,在这里发疯了。
感谢。
答案 0 :(得分:5)
替换
$(".my-label").click
与
$(".my-label").click();
您未使用click
调用该方法。您只是引用它。我想知道为什么它在Safari / Chrome中有效:它不应该。
编辑:用户编辑了问题,提供了更多背景信息。
最有可能的是,它现在无法正常工作的原因是因为您错过了准备好的文档。用以下代码替换您的代码:
$(document).ready(function(){
console.log("document ready!");
$(".my-label").click(function(){
console.log("click function!");
});
});
请报告您在JavaScript控制台中看到的内容。
如果现在它正常工作,那么Safari / Chrome已经可以使用的原因是,在那些浏览器中,代码是在DOM渲染之后执行的。那只是运气。你永远不应该依赖DOM做好准备:始终将所有引用任何DOM节点的代码放在$(document).ready()
调用中。
如果这仍然无法在IE11中运行,那么您应该为您的问题提供更多上下文。例如,console.log($(".my-label").length)
返回什么?如果是0
,则IE11未找到该节点。同样,这应该发生的唯一原因是因为DOM没有准备好,或者代码本身可能没有被调用。如果您在$(".my-label").click()
之前遇到任何错误,该代码将无法执行。请注意许多&#34;错误&#34;在普通浏览器中接受的不在IE中。如果你没有发布你在IE11 JavaScript控制台中看到的内容,我认为它很清楚(因此没有错误),但我不知道你是否检查过,所以我就是这样做的作为一种可能性。
答案 1 :(得分:2)
您是否在dom ready回调中设置了单击处理程序?如果不是,您的javascript语句可能在DOM中存在的标签之前执行。
这是一个小提琴:http://jsfiddle.net/muglio/mTaVR/
$(document).ready(function() {
$('.my-label').on('click',function(evt) {
alert('clicked');
});
});
答案 2 :(得分:0)
这是我必须做的才能让事情正常运转。最好我能猜到,对focus()的调用也会导致它失去焦点,这就是触发IE的变化事件。
另外,关于建议的.click()方法的注释...虽然这将允许事件触发,因此代码可以运行,它不会导致失去焦点,所以选择的索引&amp;价值永远不会改变(至少在我的情况下)。我事件甚至从点击事件中调用.trigger(&#39;更改&#39;)以试图强制进行更改,并且在事件触发时,所选选项从未更改。
我知道这是一个黑客攻击,但它的作用非常好IMO
// IE hack to get change event to fire properly
if ($.browser.msie) {
$('select').on('mouseover', function (e) {
$(e.target).focus();
});
}