点击功能需要2次点击

时间:2014-11-21 11:28:57

标签: javascript jquery

我有3个标签,根据点击的标签,我希望更改表单操作。 我有这个:

$('#myTab li').click(function(){
    if ($('#action1').hasClass('active')){
        $('#my-form').attr('action', '/order/signup1')
    }
    else if ($('#action2').hasClass('active')){
        $('#my-form').attr('action', '/order/signup2')
    }
    else if ($('#action3').hasClass('active')){
        $('#my-form').attr('action', '/order/signup3')
    }

});`

实际上是第一次将操作更改为错误的表单操作,然后第二次单击更正表单操作。

第一次点击我需要这个是正确的。

2 个答案:

答案 0 :(得分:0)

我认为这种情况正在发生,因为您的代码先运行,而'active'类尚未设置。您可以尝试的一件事是将代码包装在setTimeout()中。

$('#myTab li').click(function(){
    setTimeout(function() {
        if ($('#action1').hasClass('active')){
            $('#my-form').attr('action', '/order/signup1')
        }
        else if ($('#action2').hasClass('active')){
            $('#my-form').attr('action', '/order/signup2')
        }
        else if ($('#action3').hasClass('active')){
            $('#my-form').attr('action', '/order/signup3')
        }
    }, 100);
});

这至少可以帮助您确定代码是否因“太快”运行而导致

答案 1 :(得分:0)

  

..取决于单击哪个选项卡,我希望更改表单操作。

可能有一种更简单的方法可以做到这一点,但由于您没有向我们提供您的HTML,我无法确定。无论如何,你在这里不需要active课程。您可以使用点击元素的id,如下所示:this.id

以下是代码:

$('#myTab li').click(function(){
    if (this.id === 'action1'){
        $('#my-form').attr('action', '/order/signup1');
    }
    else if (this.id === 'action2'){
        $('#my-form').attr('action', '/order/signup2');
    }
    else if (this.id === 'action3'){
        $('#my-form').attr('action', '/order/signup3');
    }
});

演示:http://jsfiddle.net/8v8070eh/1/