问题出在Internet Explorer 8及更低版本中。找到了一个像样的工作解决方案。
Internet Explorer 8及更低版本未触发jQuery设置的click()
事件(甚至可能是内联的,不确定)<input />
元素,其中CSS属性display
设置为none
。它适用于Internet Explorer 9,Mozilla Firefox和Google Chrome。奇怪的。这是代码的方式,是否有适用于Internet Explorer 8及更低版本的解决方法?
要点击的input
被赋予样式display: none;
。该函数在click
的{{1}}事件中给出。由于整个内容位于input
内,因此当label
点击时,它会触发click
上的input
事件。您可以将其视为某种漂亮的选择器,隐藏label
。
默认情况下,input
隐式将label
事件转移到第一个click
,这就是我想在此处使用它。我不希望用户在这里看到丑陋的input
。预期的浏览器行为,但无法正常工作。
input
<ul>
<li>
<label>
<input type="button" value="Button 1" />
Hello! This is a list item #1.
</label>
</li>
<li>
<label>
<input type="button" value="Button 2" />
Hello! This is a list item #2.
</label>
</li>
<li>
<label>
<input type="button" value="Button 3" />
Hello! This is a list item #3.
</label>
</li>
</ul>
ul li,
ul li label {display: block; padding: 5px; cursor: pointer;}
ul li label input {display: none;}
ul li {border-bottom: 1px solid #ccc;}
ul li:hover {background-color: #eee;}
$(document).ready(function(){
$("input").click(function(){
alert("Hey you! " + $(this).attr("value"));
});
});
属性:for
仍然无效!
<label for="btn1">
<input type="button" value="Button 1" id="btn1" />
:visibility: hidden;
打破布局。但是,仍然无效!
ul li label input {visibility: hidden;}
:position: absolute;
工作!我无法使用ul li label {overflow: hidden;}
ul li label input {position: absolute; left: -99em;}
,严重抓住了!
overflow: hidden;
功能:click()
嗯,在打印$(document).ready(function(){
$("input").click(function(){
console.log("Hey you! " + $(this).attr("value"));
});
$("label").click(function(){
$(this).find("input").click();
});
});
1209 次后,IE 8会从堆栈中消失!
LOG: Hey you! Button 3
无限作品!我的剧本应该是个问题!
由于这是因为支持LOG: Hey you! Button 3
LOG: Hey you! Button 3
LOG: Hey you! Button 3
LOG: Hey you! Button 3
LOG: Hey you! Button 3
SCRIPT28: Out of stack space
的IE 8,我不得不将opacity
与display: inline-block;
一起使用。
opacity: 0;
现在隐藏了ul li label input {
opacity: 0;
width: 0px;
height: 0px;
display: inline-block;
padding: 0;
margin: 0;
border: 0;
}
的方框。此修复仅适用于IE 8!
必须使用 IE 8及以下Hack 修复:
input
答案 0 :(得分:6)
我认为这非常简单。您只需在可见项目上使用点击处理程序。如果您希望点击<label>
或<li>
以便隐藏<input>
对象并希望它在所有浏览器中都有效,那么您只需要点击一下处理程序在<label>
或<li>
上,因为这是一个可见对象,会在隐藏<input>
时收到点击。
答案 1 :(得分:5)
由于这是因为支持opacity
的IE 8,我不得不将display: inline-block;
与opacity: 0;
一起使用。
ul li label input {
opacity: 0;
width: 0px;
height: 0px;
display: inline-block;
padding: 0;
margin: 0;
border: 0;
}
现在隐藏了input
的方框。此修复仅适用于IE 8!
尝试使用IE 8 Hack:
ul li label input {
opacity: 0\9;
width: 0px\9;
height: 0px\9;
display: inline-block\9;
padding: 0\9;
margin: 0\9;
border: 0\9;
}
答案 2 :(得分:1)
你能不能将元素置于绝对位置,但是将它的左边属性设置为-99999px?
答案 3 :(得分:0)
不同的浏览器以不同的方式解释display:none
。 display:none
实际上意味着元素应该消失,使得jquery很难在DOM中找到。
更好的方法是使用visibility:hidden
,然后使用click
方法
答案 4 :(得分:0)
您的代码非常不正确..
input
在label
内?
在您更新的4中,您可以为“输入”点击执行event.stopPropagation
,这将解决无限问题
答案 5 :(得分:0)
从来没有受到过这样的打击,因为我做的事情略有不同 - 点击标签input.checked = !input.checked; return false;
,然后进行&#34;更改&#34;输入事件(而不是点击事件)。