Javascript 创建函数以动态生成其他代码

Javascript 创建函数以动态生成其他代码,javascript,Javascript,我有这段代码,它修改了与所需表单元素标签相关联的文本(由jquery验证程序插件生成),当它们有效时: var phrases = Array('OK!', 'Sweet!', 'Nice!', 'On a roll!', 'Thanks!', 'Perfect!', 'You amaze me!'); var election_date_phrase = phrases[Math.floor(Math.random()*phrases.length)] ; var another_el

我有这段代码,它修改了与所需表单元素标签相关联的文本(由jquery验证程序插件生成),当它们有效时:

 var phrases = Array('OK!', 'Sweet!', 'Nice!', 'On a roll!', 'Thanks!', 'Perfect!', 'You amaze me!');

 var election_date_phrase = phrases[Math.floor(Math.random()*phrases.length)] ;
 var another_element_phrase = phrases[Math.floor(Math.random()*phrases.length)] ;
 // and so on for each element

 $('body').on('DOMSubtreeModified', 'em#election_date_ul_form-error', function() {
   if ($(this).hasClass('valid') && $(this).text() === 'Ok!') {
     var phrase = election_date_phrase;
     $(this).text(phrase);
   }
 });

 $('body').on('DOMSubtreeModified', 'em#another_element_ul_form-error', function() {
   if ($(this).hasClass('valid') && $(this).text() === 'Ok!') {
     var phrase = another_element_phrase;
     $(this).text(phrase);
   }
 });
 // and so on for each element
显然,这段代码是重复的,我相信它可以被分解。由于对javascript不是很有经验,我在想怎么做时遇到了一些困难

尝试失败#1 我觉得我可能很接近,但是没有触发
domsubtreemedited
(可能是因为它被包装在一个函数中)

  var valid_phrase_changer = (function (element) {
      alert(element);
    var phrases = Array('OK!', 'Sweet!', 'Nice!', 'On a roll!', 'Thanks!', 'Perfect!', 'You amaze me!');
    var phrase = phrases[Math.floor(Math.random()*phrases.length)] ;
    return function (element, phrase) {
      $('body').on('DOMSubtreeModified', 'em#' + element + '-error', function() {
        if ($(this).hasClass('valid') && $(this).text() === 'Ok!') {
          $(this).text(phrase);
        }
      });
    };
  });

  valid_phrase_changer('election_desc_ul_form');

注意,每个元素的短语必须是静态的。我希望每个元素的短语都是相同的。

最终得到了它。诀窍是使用
forEach
循环为每个元素创建代码。我认为我的问题的主要部分是我仍然不熟悉js/jQuery语法,并且总是忘记
on
什么都不是但是一个函数调用有三个参数,第三个参数是闭包

 var phrases = Array('OK!', 'Sweet!', 'Nice!', 'On a roll!', 'Thanks!', 'Perfect!', 'You amaze me!');

 function valid_phrase_changer(elements) {
   elements.forEach(function(element) {
     var phrase = phrases[Math.floor(Math.random()*phrases.length)] ;
     $('body').on('DOMSubtreeModified', 'em#' + element + '-error', function () {
       if ($(this).hasClass('valid') && $(this).text() === 'Ok!') {
         $(this).text(phrase);
       }
     });
   });
 }

 valid_phrase_changer(['election_desc_ul_form', 'election_date_ul_form']);

你正在寻找闭包。啊,是的。这是我一直在寻找但记不起来的词。我会在谷歌上搜索。只需将所有常用代码粘贴到一个函数中,然后传入不同的部分。是的,我朝那个方向走了,但函数必须知道触发了哪个元素,所以我认为这不起作用。在该函数中传递
这个
作为论据的辩论