首次点击时不会触发功能

时间:2015-07-08 16:05:30

标签: javascript jquery html

我有一个按钮,需要点击两个功能。这是我的按钮:

<button id="btnNext" onclick="increment(); Next();">Next</button>

increment()函数在第一次单击时按预期工作,但Next()函数没有。首次点击后它确实按预期工作。如果我删除increment()函数,则Next()函数在第一次单击时起作用。我尝试过组合这些功能,但它给了我相同的结果。

Next()函数移动到下一个表单,increment()函数将滚动条滑块移动到所需位置。

以下是我的功能:

var Next = function () {
    UserVM.Model.MoveCurrentToNext();  
}

var increment = function () {
    if (lastScroll < 240) {
        lastScroll += 40;
    }
    scrollpos.scrollTop = lastScroll;
}

有谁知道原因是什么?

更新:我在Next()函数中添加了一个提醒。现在,当我触发按钮时,它会在弹出警告框时显示下一个表单,但是当我单击“确定”时,它将返回到上一个表单。这只在我第一次点击按钮时发生。有什么理由吗?无论如何要解决它?

6 个答案:

答案 0 :(得分:1)

我不知道你为什么要为一个onclick单元使用两个单独的功能,因为如果你想要同时执行这两个操作,为什么不在同一个表单中调用表单重定向代码功能

var increment = function ()
{
    if (lastScroll < 240)
    {
        lastScroll += 40;
    }
    scrollpos.scrollTop = lastScroll;
    //form navigation
    UserVM.Model.MoveCurrentToNext();
}
  

<强> HTML

<button id="btnNext" onclick="increment();">Next</button>

答案 1 :(得分:0)

你可以试试这个:

var Next = function () {
alert("This is Next Function");  
}

var increment = function () {
    alert("This is Increment Function");
    Next();
}
<button id="btnNext" onclick="increment()">Next</button>

答案 2 :(得分:0)

我觉得这是一个时间问题。添加一点延迟以使滚动位置发生变化。 (只是一个有根据的猜测);

var Next = function () {
    window.setTimeout(UserVM.Model.MoveCurrentToNext, 100);  
}

var increment = function () {
    if (lastScroll < 240) {
        lastScroll += 40;
    }
    scrollpos.scrollTop = lastScroll;
}

答案 3 :(得分:0)

所有提供的答案工作但我认为这个更接近你需要的(没有使用其他JS库也没有使功能依赖他人)

<button id="btnNext" onclick="(function(){increment();setTimeout(next, 100)})()">Next</button>

请注意,此解决方案将increment()和newxt()函数的调用包装在另一个匿名函数中。

答案 4 :(得分:0)

删除onclick attr并将其放入代码js:

$(document).ready(function(){
  $(document).on("click","#btnNext",function(){
    Next();
    increment(); 
  });
});

答案 5 :(得分:0)

我感到愚蠢。我想通了,应该早点弄明白了。我在另一个函数中有变量lastScroll,所以我只需将其更改为变量位置 - var position = 0;。现在它有效。抱歉浪费了所有人的时间。我会留下这个问题,以防你的任何答案帮助其他人。