问题是与Internet Explorer 8和下面。 有没有找到一份像样的工作方案。
问题
Internet Explorer 8和下面没有触发click()
事件的jQuery设置(或者甚至可以是内联的,不知道)上<input />
元素,其具有的CSS属性, display
设置为none
。 它的工作原理在Internet Explorer 9,Mozilla Firefox浏览器和谷歌浏览。 奇怪的。 这是怎样的代码是,是否有任何变通的Internet Explorer 8和下面?
上下文
的input
被点击被赋予一个风格display: none;
。 而且功能在给定click
的事件input
。 由于整个东西是里面label
时,会触发click
事件的input
时, label
点击。 你可以以此为某种漂亮选择器,隐藏input
。
该label
隐含转移的click
事件到第一input
默认情况下,这也正是我想在这里使用它。 我不想让用户看到丑陋的input
在这里。 预计浏览器的行为,但不工作。
HTML
<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>
造成这一问题的确切CSS
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;}
JavaScript的
$(document).ready(function(){
$("input").click(function(){
alert("Hey you! " + $(this).attr("value"));
});
});
小提琴: http://jsfiddle.net/qSYuP/
更新#1:尝试给予for
属性:
<label for="btn1">
<input type="button" value="Button 1" id="btn1" />
还是不行!
更新#2:尝试CSS visibility: hidden;
:
ul li label input {visibility: hidden;}
休息布局。 但是,仍然无法正常工作!
更新#3:尝试CSS position: absolute;
:
ul li label {overflow: hidden;}
ul li label input {position: absolute; left: -99em;}
作品! 我不是在使用位置overflow: hidden;
,认真抓好!
更新#4:手动触发click()
函数:
$(document).ready(function(){
$("input").click(function(){
console.log("Hey you! " + $(this).attr("value"));
});
$("label").click(function(){
$(this).find("input").click();
});
});
那么,IE 8熄灭堆栈的打印后LOG: Hey you! Button 3
LOG: Hey you! Button 3
的1209倍!
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;
}
现在input
的盒子是隐藏的,从字面上。 此修复程序仅适用于IE 8!
不得不使用IE 8和下面哈克修复:
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;
}