Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery .click()不启动函数吗?_Jquery - Fatal编程技术网

Jquery .click()不启动函数吗?

Jquery .click()不启动函数吗?,jquery,Jquery,我有一些复选框,可以打开/关闭选择选项值。这部分很好用 现在我想在默认情况下选中页面加载后的复选框 我试过了。单击它会选中复选框,但不会运行链接到它的单击代码。在firefox 6.0.2、Safari和Chrome上测试。有什么建议吗 示例如下所示 嗯。。。在Safari 5.0.4上为我工作。我怀疑在您运行的任何浏览器上,.click由于某些原因无法用于复选框。也可以尝试在更改时运行代码。我认为您需要单独调用函数 以下方面应起作用: $(function(){ $selectClone

我有一些复选框,可以打开/关闭选择选项值。这部分很好用

现在我想在默认情况下选中页面加载后的复选框

我试过了。单击它会选中复选框,但不会运行链接到它的单击代码。在firefox 6.0.2、Safari和Chrome上测试。有什么建议吗

示例如下所示


嗯。。。在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();
});