0

我有这个小提琴,每当我按下按钮来翻转两个面板的位置时,我都想要。该代码运行得很好几次,然后它开始同时抛出 false 和 true 。看看小提琴

http://jsfiddle.net/alexnode/RYchY/2/

我调用这个函数来切换面板

function switchpanels() {

    if (panelswitched === false) {
        $(".centralpanel").css("left", "75%");
        $(".trpanel").css("left", "50%");
         panelswitched = true;
        return;//not sure if needed 

    } else if (panelswitched === true) {
        $(".centralpanel").css("left", "50%");
        $(".trpanel").css("left", "75%");
        panelswitched = false;
        return;
    }

我使用相同的按钮 ID 来调用开关面板,但来自不同的功能。

  function german() {


            switchpanels();

            $("#tr1").text("German to Urdu");

            $("#tr1").click(function () {
                urdu();
            });


    }

    function urdu() {

            switchpanels();
            $("#tr1").text("Urdu to English");
            $("#tr1").click(function () {
                english();
            });

每个功能都会有很多情况,但我简化了它以进行发布。我不确定我做错了什么。是不是从之前的功能中兑现了点击?或者它是非常基本的东西?

4

3 回答 3

3

那是因为您在调用该german函数时附加了一个新的单击处理程序。因此,如果您调用它 5 次,则处理程序将被调用 5 次。将它放在german函数的上下文之外并.trigger('click')改为使用。

function german() {
    switchpanels();
    $("#tr1").text("German to Urdu").trigger('click'); // trigger the click event
}
// The click handler
$("#tr1").click(urdu);
于 2013-06-09T01:28:06.823 回答
1

尚未测试,但这应该更容易:

var languages = ['German', 'Urdu', 'English', 'Spanish'], //however many you want
    cur_language = 0;

function switchLanguage() {
    switchpanels();
    var new_language = cur_language + 1;
    if (new_language === languages.length) {
        new_language = 0;
    }
    $("#tr1").text(languages[cur_language] + " to " + languages[new_language]);
    cur_language = new_language;
}

$("#tr1").click(function () {
    switchLanguage();
});
于 2013-06-09T04:00:13.973 回答
0

我相信我的问题的答案是使用 .off .on 这样我就可以使用相同的按钮从一个函数传递到另一个函数。因为我是一个菜鸟,所以在获得一些支持之前,我不会将答案标记为正确。但我的代码至少在表面上是有效的......

http://jsfiddle.net/alexnode/RYchY/3/

$("#tr1").show().text("French to German").off('click').on('click',function(){ german("fr");});
于 2013-06-09T03:49:46.030 回答