Jquery .click()不启动函数吗?
我有一些复选框,可以打开/关闭选择选项值。这部分很好用 现在我想在默认情况下选中页面加载后的复选框 我试过了。单击它会选中复选框,但不会运行链接到它的单击代码。在firefox 6.0.2、Safari和Chrome上测试。有什么建议吗 示例如下所示Jquery .click()不启动函数吗?,jquery,Jquery,我有一些复选框,可以打开/关闭选择选项值。这部分很好用 现在我想在默认情况下选中页面加载后的复选框 我试过了。单击它会选中复选框,但不会运行链接到它的单击代码。在firefox 6.0.2、Safari和Chrome上测试。有什么建议吗 示例如下所示 嗯。。。在Safari 5.0.4上为我工作。我怀疑在您运行的任何浏览器上,.click由于某些原因无法用于复选框。也可以尝试在更改时运行代码。我认为您需要单独调用函数 以下方面应起作用: $(function(){ $selectClone
嗯。。。在Safari 5.0.4上为我工作。我怀疑在您运行的任何浏览器上,.click由于某些原因无法用于复选框。也可以尝试在更改时运行代码。我认为您需要单独调用函数 以下方面应起作用:
$(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();
});
您的click函数正在被调用,但当它运行时,复选框尚未被选中。这可以通过单击功能顶部的警报确认 问题是,在Firefox实际选中该复选框之前,您的单击功能正在运行,因此您查找:checked输入的选择器尚未包含您触发的复选框 有多种方法可以解决此问题,其中任何一种都可以帮助您开始: 1.在单击函数中设置选中的属性
2.仅使用已单击的复选框,而不是每个复选框将隐藏/显示位移动到函数中,并在单击处理程序和初始化函数中调用该函数 调用click方法时,它似乎在实际设置checked属性之前运行绑定到该事件的Javascript方法。我相信这是问题的根源,在你最初的职位
通过首先手动设置checked属性,然后运行与单击事件关联的标准回调,我们可以模拟标准行为。我已经写下了这段代码,并且已经完成了。我还对代码进行了一些清理,使其在显示或隐藏其他选项时,选择框保留所选选项。哦,我错过了它,感谢您共享代码。有时候我想知道是否应该添加代码。如果JSFIDLE不工作或不再存在该怎么办。不知道该怎么办。也许可以在meta上创建一个问题:-你不能直接调用链接到它的点击代码吗?JSFIDLE是共享代码的完美工具啊。。是的,在加载时运行click是错误的,因为没有任何东西被“click”。尝试编写一点脚本以查看加载时的复选框并手动运行代码。没有单击任何内容,但已单击复选框。这对我来说没什么意义…复选框被选中了。按下鼠标按钮,单击激发特定的人类动作。那么,选中复选框加载不会触发任何特殊事件,因为没有发生任何事情,它只是以这种方式开始。老实说,我会消除否决投票的可能性。有人怎么能否决工作答案?事实上,否决的目的是从其他答案中过滤工作答案。我不介意被否决,但我介意没有明显的理由。顺便说一句,我希望这个答案有帮助。但这并不意味着没有。@Gabe:你能详细说明一下吗?@Radek:我相信他的意思,或者说,因为他删除了他的评论,可能有一个更好的、有效的答案。有没有可能你可以详细说明这两种方法。我不明白。1我为什么要设置checked属性?已经定好了,不是吗。2这有什么帮助?@Radek不,不完全是。他的代码是直接调用click函数,而不是将hide/show功能分解成一个单独的函数。没错,steveax的答案有一个更复杂的代码,+1。是的,那么代码更干净,更可重用。看来你的答案会被接受。。。。谢谢。实施了您的解决方案。谢谢。出于某种原因,我不明白为什么,我不能让这段代码显示所有三个选项。
$(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();
});