【问题标题】:How to get the next element of an array with Jquery onclick如何使用 Jquery onclick 获取数组的下一个元素
【发布时间】:2013-06-23 19:17:10
【问题描述】:

大家好,我正在尝试从 html 数组中更改对象的 html。但我在正确迭代时遇到问题。我设法让它工作一次 编辑 在对我的问题的明确性提出了一些抱怨之后,我将重新措辞。我有一个名为 .trpanel 的 div 面板和一个名为 #trigger2 的按钮(它是下一个按钮)。然后我有一系列包含翻译文本的 div。当我按下按钮(称为下一步)时,我希望在 trpanel 上逐个循环浏览翻译。

var ltranslation = [];
    ltranslation[0] = $("#translation-en-1").html();
    ltranslation[1] = $("#translation-ur-en").html();
    ltranslation[2] = $("#translation-fr-en").html();
    ltranslation[3] = $("#translation-it-en").html();
    ltranslation[4] = $("#translation-sp-en").html();
    ltranslation[5] = $("#translation-po-en").html();
    ltranslation[6] = $("#translation-fr-en").html();
    ltranslation[7] = $("#translation-de-en").html();

    var l= ltranslation;



   $("#trigger2").off('click').on('click',function(){ 
    for (var i = 0; i <= ltranslation.length; i++){ 
if (i==7){i=0;}
     $(".trpanel").html.ltranslation[i]; or ???//replace().ltranslation[]+i??? the code throws errors  
    } 
    });

我对 Javascript 还是很陌生,我对对象、数组和循环的类型有点困惑。我设法添加了 html,但没有替换它们……所以它们一个接一个地出现。我试图更改代码,但从那以后一直没有用。任何帮助将不胜感激。

【问题讨论】:

  • 在调用 .on('click') 之前使用 .off('click') 在您的示例中看起来没用。 if (i==7){i=0;} 也是如此:只需使用排他比较器(
  • 我之前使用相同的#trigger 按钮来做其他事情,并且在关闭的情况下我可以取消绑定以前的事件处理程序。我不完全确定 Jquery 到底在那里做了什么,但关闭它可以工作。

标签: javascript jquery arrays loops


【解决方案1】:

很多猜测,但似乎您正在尝试这样做:

var trans = $('[id^="translation-"]'),
    idx   = 0;

$("#trigger2").on('click',function(){
    $(".trpanel").html( trans.eq(idx).html() );
    idx = idx > 6 ? 0 : idx+1;
});

FIDDLE

【讨论】:

  • 每次按下按钮时,我都会尝试更改 html。您有一个按钮(称为下一个),然后当您按下它时,会看到一个接一个的文本。最后重置以从头开始。
  • @alexnode - 哦,好吧,编辑了答案,这对你有用吗?
  • 非常感谢这工作。我必须用finishTo english $('[id$="en"]') 更改startsWith 翻译。有一些奇怪的行为,虽然在它找到所有英语之后它添加了所有其他翻译,但也有很多其他语言的翻译。 !!!我不明白 eq(idx) 是否获取所有 id 并对它们进行排序?
  • eq() 仅从匹配选择器的元素中获取一个元素,因此 eq(0) 将获得第一个元素,以此类推,idx 是一个索引,每次点击都会增加。
  • 最后我修好了,我遇到了一些问题,一个是没有开-关它不能很好地工作(我以前用同一个按钮做其他事情)非常感谢! eq 正是需要的。精彩的代码。
【解决方案2】:

我认为您正在尝试这样做:

if (i == 7) {
    i = 0; // I don't really know why you are doing this, but it will reset the loop
}
 $(".trpanel").html(ltranslation[i]); //I'm passing ltranslation[i] to the html method. Instead of .html.ltranslation[i].
} 

另外,没有看到任何 html,我不确定,但我认为您可能想要迭代 .trpanel

类似:

 $(".trpanel").eq(i).html(ltranslation[i]);

另一件事(我认为您可以使您的代码更清晰)。您可以在函数中抽象数组填充,如下所示:

var ltranslation = [];
var languages = ["en-1", "ur-en", "fr-en", "it-en", "sp-en", "po-en", "fr-en", "de-en"];

$.each(languages, function(index) {
    ltranslation[index] = $("#translation-" + this).html();
});
// Then you can use ltranslation

【讨论】:

  • @alexnode: 你的条件是&lt;= 而不是&lt;
  • @alexnode,如果在调用ltranslation[i] 时出现这种情况,则表示您没有正确定义ltranslation,它是undefined
  • 谢谢 Nico,但我先接受了 Adeneo 的帖子。抱歉,问题写得不好。
【解决方案3】:

如果你想翻阅几个翻译,我会这样实现:

var translations=["hej","hello", "hallo","hoy"];

var showTranslation=function(){
    var current=0;
    var len=translations.length;
    return function(){
        var direction=1;
        if (current>=len) current=0;
        $("#text").text(translations[current]);
        current+=direction;
    }
}();

$("#butt").on("click", showTranslation);

小提琴:http://jsfiddle.net/Xr9fz/

进一步:你应该给你的翻译一个类,这样你就可以用一行轻松地抓住所有的翻译:

$(".translation).each(function(index,value){ ltranslation.push(value); })

【讨论】:

  • 谢谢谢谢 Lilith 的工作,但我先接受了 Adeneo 的帖子。抱歉问题写得不好。
【解决方案4】:

从问题:我设法添加了 html,但没有替换它们 -

我认为您想将所有这些项目添加到 $(".trpanel")。首先,不要取每个元素的HTML,clone元素本身:

//method ripped from Nico's answer.
var ltranslation = [];
var languages = ["en-1", "ur-en", "fr-en", "it-en", "sp-en", "po-en", "fr-en", "de-en"];

$.each(languages, function(index) {
    ltranslation[index] = $("#translation-" + this).clone();
});

然后您可以将所有内容附加到容器中,因此添加 html 但不替换它们append 接受一个数组而不替换之前的 html。

$("#trigger2").off('click').on('click',function() {
    $(".trpanel").append(ltranslation);
}); 

【讨论】:

  • 我可以使用 replace(ltranslation) 代替吗? append 会将它们全部添加到另一个之下。
  • 试试html而不是append
【解决方案5】:

我不知道您到底想做什么,但我已将 cmets 放入您的代码中,以帮助您更好地了解您的代码在做什么。你的代码的最终效果是这样的(我怀疑你想要的):

 $("#trigger2").off('click').on('click',function(){ 
     $(".trpanel").html(ltranslation[7]); 
});

这是你的代码,有一些 cmets 和小改动

   var ltranslation = [];
    ltranslation[0] = $("#translation-en-1").html();
    ltranslation[1] = $("#translation-ur-en").html();
    ltranslation[2] = $("#translation-fr-en").html();
    ltranslation[3] = $("#translation-it-en").html();
    ltranslation[4] = $("#translation-sp-en").html();
    ltranslation[5] = $("#translation-po-en").html();
    ltranslation[6] = $("#translation-fr-en").html();
    ltranslation[7] = $("#translation-de-en").html();

var l= ltranslation;



   $("#trigger2").off('click').on('click',function(){ 
    for (var i = 0; i < ltranslation.length; i++){ 
     //if (i==7){i=0;}  <-- This will cause an infinite loop won't it?  are you trying to reset i? i will reset next time loop is called,
          $(".trpanel").html(ltranslation[i]);  //<-- this will overwrite elements with class .trpanel ltranslation.length times... 
         ///you'll see only the value of translation[7] in the end
     } 
    });

编辑

要根据你的 cmets 做你想做的事,试试这个:

 var ltranslation = [];
        ltranslation[0] = $("#translation-en-1").html();
        ltranslation[1] = $("#translation-ur-en").html();
        ltranslation[2] = $("#translation-fr-en").html();
        ltranslation[3] = $("#translation-it-en").html();
        ltranslation[4] = $("#translation-sp-en").html();
        ltranslation[5] = $("#translation-po-en").html();
        ltranslation[6] = $("#translation-fr-en").html();
        ltranslation[7] = $("#translation-de-en").html();
 var counter = 0;//a global counter variable
 $("#trigger2").click(function(){  //eeverytime button is clicked do this
    $(".trpanel").html(ltranslation[counter]); //set the html to an element of array
    counter++;  //increment counter
    if(counter==ltranslation.length) //reset the counter if its bigger than array len
       counter=0;

  });

【讨论】:

  • 每次按下按钮时,我都会尝试更改 html。您有一个按钮(称为下一个),然后当您按下它时,会看到一个接一个的文本。最后重置以从头开始。
猜你喜欢
  • 2012-06-05
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 2017-05-31
  • 2015-09-01
  • 1970-01-01
相关资源
最近更新 更多