模拟点击不起作用... jQuery

时间:2012-10-08 08:35:40

标签: jquery triggers click simulate

如果td的类是“nee”,我试图用jquery模拟一次点击。不知何故,所有选项如触发器和文档就绪点击都不会起作用......

HTML:

<td align="center" class="one nee">
   <img class="img-swap" src="images/nee.png" alt="Aanwezigheid"/>
</td>

触发操作:

    $(document).ready(function(){ 
          $('#some-id').trigger('click'); 
    });

HTML返回的图像是变量,标准值是“ja.png”。但是,只要数据库中的项目设置为no,图像就会更改为nee.png。但是当触发时,我想要输入字段,就像我点击ja.png更改为nee.png时出现的那样。它是淡入淡出的。它是分开的。但我无法点击模拟..

图片更改代码:

        $(document).ready(function(){
          $(".img-swap").click("click", function() {
            if ($(this).attr("class") == "img-swap") {
              this.src = this.src.replace("ja","nee");
            } else {
              this.src = this.src.replace("nee","ja");
            }
            $(this).toggleClass("ja");
          });
         });

fadein行动代码:

        $(document).ready(function(){       
            $(".nee").trigger("click");
            $("td.one").click("click", function(){

                if ($(this).parent().find("td.two, td.three").hasClass("toggled")){
                    $(this).parent().find("td.two").fadeOut(400);
                    $(this).parent().find("td.three").fadeOut(400);
                    $(this).parent().find("td.two").removeClass("toggled");
                    $(this).parent().find("td.three").removeClass("toggled");

                } else {

                    if ($(this).parent().find("td.three").hasClass("DoNotWant")){
                        $(this).parent().find("td.three").fadeOut(400);
                        $(this).parent().find("td.three").toggleClass("DoNotWant");
                    } else {
                        $(this).parent().find("td.three").fadeIn(400);
                        $(this).parent().find("td.three").toggleClass("toggled");
                    }

                    $(this).parent().find("td.two").fadeIn(400);
                    $(this).parent().find("td.two").toggleClass("toggled");
                }                   
            });

            $("td.two").click("click", function(){

                if ($(this).parent().find("td.three").hasClass("toggled")){
                    $(this).parent().find("td.three").fadeOut(400);
                    $(this).parent().find("td.three").removeClass("toggled");
                    $(this).parent().find("td.three").toggleClass("DoNotWant");

                } else { 
                    $(this).parent().find("td.three").fadeIn(400);
                    $(this).parent().find("td.three").toggleClass("toggled");

                }
            });             
        });

任何可以帮助我的人?​​

现场示例在这里: http://bryan.limewebsolutions.nl/

2 个答案:

答案 0 :(得分:1)

我没有触发点击,而是说存储对回调函数的引用会更容易,然后将该引用用作点击事件回调,然后再单独调用i,而不是触发点击事件。像这样:

var callback = function(){  
    if ($(this).parent().find("td.two, td.three").hasClass("toggled")){
        $(this).parent().find("td.two").fadeOut(400);
        $(this).parent().find("td.three").fadeOut(400);
        $(this).parent().find("td.two").removeClass("toggled");
        $(this).parent().find("td.three").removeClass("toggled");

    } else {

        if ($(this).parent().find("td.three").hasClass("DoNotWant")){
            $(this).parent().find("td.three").fadeOut(400);
            $(this).parent().find("td.three").toggleClass("DoNotWant");
        } else {
            $(this).parent().find("td.three").fadeIn(400);
            $(this).parent().find("td.three").toggleClass("toggled");
        }

        $(this).parent().find("td.two").fadeIn(400);
        $(this).parent().find("td.two").toggleClass("toggled");
    }                   
};

// Bind the click event
$("td.one").click("click", callback);
$(function () {
   // Instead of triggering a click, just call the function
   callback();
});

在此示例中,为简化示例而忽略了td.two的回调

旁注:

  1. 我相信你的逻辑存在问题,如果你有多个td与if语句中的选择器匹配。在这种情况下,在检查它是否具有类toggled时,将始终使用匹配的第一个元素。 .hasClass()将评估匹配元素集中的第一个元素。

  2. 使用较少的DOM遍历可以提高代码的效率。在回调中,在变量中保存对父项的引用,并使用该变量而不是每次都调用$(this).parent()

答案 1 :(得分:1)

.click().bind('click')的快捷方式,因此您无需向该函数提供事件类型(click)。

将您的.click("click", function(){更改为.click(function(){,您的触发器应该可以正常运行。