我有复选框可以打开/关闭选择选项值。这部分工作正常。
现在我想默认在页面加载后“检查”复选框。
我尝试.click()
检查复选框但不运行链接到它的点击代码。测试了firefox 6.0.2,Safari&铬。有任何建议怎么做?
$(function(){
$selectClone = $("select[name=db2_timestamp]").clone(true);
$("input[name=hideit]").click(function(){
var $this;
$selectClone.find("option").attr("disabled", false);
$("input[name=hideit]").each(function(){
var value = $(this).attr('value');
if($(this).is(":checked")){
$selectClone.find("option").each(function(){
$this = $(this);
if($this.val().indexOf(value) != -1){
$this.attr("disabled", true);
}
});
}
})
var $select = $("select[name=db2_timestamp]")
$select.children().remove();
$selectClone.find("option:enabled").each(function(){
$select.append($(this).clone(true));
});
});
$("input[value=w]").click();
});
答案 0 :(得分:2)
将hide / show位移动到一个函数中,并在单击处理程序和初始化函数中调用该函数。 Fiddle here
答案 1 :(得分:0)
嗯...在Safari 5.0.4上适合我。我怀疑在你运行的任何浏览器上,.click()由于某种原因不适用于复选框。也可以尝试在变更时运行代码。
答案 2 :(得分:0)
我相信你需要单独调用你的功能。
以下内容应该有效:
$(function(){
$selectClone = $("select[name=db2_timestamp]").clone(true);
var $click = function(){
var $this;
$selectClone.find("option").attr("disabled", false);
$("input[name=hideit]").each(function(){
var value = $(this).attr('value');
if($(this).is(":checked")){
$selectClone.find("option").each(function(){
$this = $(this);
if($this.val().indexOf(value) != -1){
$this.attr("disabled", true);
}
});
}
})
var $select = $("select[name=db2_timestamp]")
$select.children().remove();
$selectClone.find("option:enabled").each(function(){
$select.append($(this).clone(true));
});
};
$("input[name=hideit]").click($click);
$("input[value=w]").click();
$click();
});
答案 3 :(得分:0)
您的点击功能正在被调用,但是当它运行时,该复选框尚未被检查。这可以通过点击功能顶部的提醒进行确认。
问题是您的点击功能在Firefox实际检查框之前正在运行,因此找到“:checked”输入的选择器尚未包含您触发的复选框。
您可以通过多种方式解决此问题,其中任何一种都可以帮助您入门: 1.在click函数中设置checked属性 2.仅使用单击的复选框,而不是每个复选框
答案 4 :(得分:0)
当你调用click()方法时,它似乎在实际设置checked属性之前运行绑定到该事件的Javascript方法。我相信这是你最初的帖子中问题的根源。
首先手动设置checked属性,然后运行与click事件关联的标准回调,我们可以模仿标准行为。我已经编写了这段代码并posted it in this Fiddle。我还清理了一些代码并使其成为选择框,以便在显示或隐藏其他选项时保留所选选项。