.click()不起火功能?

时间:2011-09-26 01:52:19

标签: jquery

我有复选框可以打开/关闭选择选项值。这部分工作正常。

现在我想默认在页面加载后“检查”复选框。

我尝试.click()检查复选框但不运行链接到它的点击代码。测试了firefox 6.0.2,Safari&铬。有任何建议怎么做?

jsfiddle示例为here或以下

$(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();
});

5 个答案:

答案 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();
});

Here's a working jsfiddle

答案 3 :(得分:0)

您的点击功能正在被调用,但是当它运行时,该复选框尚未被检查。这可以通过点击功能顶部的提醒进行确认。

问题是您的点击功能在Firefox实际检查框之前正在运行,因此找到“:checked”输入的选择器尚未包含您触发的复选框。

您可以通过多种方式解决此问题,其中任何一种都可以帮助您入门: 1.在click函数中设置checked属性 2.仅使用单击的复选框,而不是每个复选框

答案 4 :(得分:0)

当你调用click()方法时,它似乎在实际设置checked属性之前运行绑定到该事件的Javascript方法。我相信这是你最初的帖子中问题的根源。

首先手动设置checked属性,然后运行与click事件关联的标准回调,我们可以模仿标准行为。我已经编写了这段代码并posted it in this Fiddle。我还清理了一些代码并使其成为选择框,以便在显示或隐藏其他选项时保留所选选项。