情况:
我有以下jquery:
addButton();
function addButton(){
var div = $("#mydiv");
div.append(addHtml());
addEvents(div);
}
function addEvents(div){
div.find(".toggleButton").button();
div.find(".toggleButton").click(function(e) {
alert("test");
});
}
function addHtml(div){
return "<input class=\"toggleButton\" type=\"checkbox\" id=\"id1\" name=\"name1\" /><label for=\"id1\">Yes</label>";
}
复选框变为按钮,但不会在点击时发出警报。为什么按钮部分工作但不是点击部分???
更新 这适用于Firefox,但不适用于ie-8。不幸的是,我需要它在ie-8中工作。
更新2: 如果我注释掉.button调用,则点击部分在ie-8中工作。我如何让两者一起工作?
更新3: 在firefox中生成的实际html:
<input class="toggleButton ui-helper-hidden-accessible" id="id1" name="name1" type="checkbox"><label aria-disabled="false" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" aria-pressed="false" for="id1"><span class="ui-button-text">Yes</span></label>
在IE-8中生成的实际html:
<INPUT id=id1 class="toggleButton ui-helper-hidden-accessible" type=checkbox name=name1 jQuery1294922695438="218"><LABEL aria-disabled=false class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" role=button aria-pressed=false for=id1 jQuery1294922695438="223"><SPAN class=ui-button-text jQuery1294922695438="225">Yes</SPAN></LABEL>
答案 0 :(得分:4)
问题在于IE-8决定激活点击的内容。在IE-8中,标签是驱动点击的因素,因此您必须将click事件附加到标签上!
此外,您不能在输入和标签上使用相同的类;为了在ie-8和firefox中正常工作,你必须这样做:
function addEvents(div){
div.find(".toggleButtonInput").button();
div.find(".toggleButtonLabel").click(function(e) {
alert("test");
});
}
function addHtml(div){
return "<input class=\"toggleButtonInput\" type=\"checkbox\" id=\"id1\" name=\"name1\" /><label class=\"toggleButtonLabel\" for=\"id1\">Yes</label>";
}
然后它正常工作。
答案 1 :(得分:1)
您可以使用最快的id选择器,并使用.live()
绑定click事件,因为您在运行时生成元素。
$("#id1").live("click", function(){
alert("clicked");
});
答案 2 :(得分:0)
我会用:
$(".toggleButton", div).click(function(e) {
alert("test");
});