jquery输入数组动态slug

Posted

技术标签:

【中文标题】jquery输入数组动态slug【英文标题】:jquery input array to slug dynamically 【发布时间】:2012-04-04 11:45:24 【问题描述】:

我正在开发一个 CMS 系统,以“尝试”原生支持多语言。

我有类似的表单字段

<input name="title[en]" type="text">

并使用当我选择输入字段时成功运行的 slugger 插件:

$("input[name=title\\[en\\]]").stringToSlug(getPut: "input[name=url\\[en\\]]");

问题是:我的en,fr,de,es 值来自db。如何使foreach 循环告诉jquery 它应该为多种语言编写同一行,例如:

$("input[name=title\\[en\\]]").stringToSlug(getPut: "input[name=url\\[en\\]]");
$("input[name=title\\[fr\\]]").stringToSlug(getPut: "input[name=url\\[fr\\]]");
$("input[name=title\\[de\\]]").stringToSlug(getPut: "input[name=url\\[de\\]]");
$("input[name=title\\[es\\]]").stringToSlug(getPut: "input[name=url\\[es\\]]");

【问题讨论】:

【参考方案1】:

这仅涉及一种简单的重构技术:循环。如果你创建了一个你想要使用的语言数组,你可以使用 jQuery .each method 来实现这一点。

$.each(["en", "fr", "de", "es"], function(index, lang) 
  $("input[name=title\\[" + lang + "\\]]").stringToSlug(getPut: "input[name=url\\[" + lang + "\\]]"); 

如果您关心性能并且不希望 .each 方法涉及的开销,您可以改用传统的 for 循环:

var langs = ["en", "fr", "de", "es"];
for(var i = 0; i < langs.length; i++) 
  var lang = langs[i];
  $("input[name=title\\[" + lang + "\\]]").stringToSlug(getPut: "input[name=url\\[" + lang + "\\]]"); 
 

【讨论】:

【参考方案2】:

你可能会使用这样的东西:

$.each(['en','fr','de','es'], function (i, lang) 
  $("input[name=title\\["+lang+"\\]]").stringToSlug(getPut: "input[name=url\\["+lang+"\\]]");

【讨论】:

以上是关于jquery输入数组动态slug的主要内容,如果未能解决你的问题,请参考以下文章

jQuery验证动态输入[重复]

不同的重写动态 slug 被视为重复

盖茨比动态 slug

如何设置动态路由以在 CodeIgniter 中使用 slug?

使用动态确定的 slug 将路由反应到页面 [重复]

盖茨比类别 slugs 在动态类别页面中不起作用