代码之家  ›  专栏  ›  技术社区  ›  Olex Ponomarenko

onclick事件中不可访问来自<head>的任意参数javascript函数

  •  0
  • Olex Ponomarenko  · 技术社区  · 15 年前

    好吧,这可能是一个愚蠢的问题(可能是某种语法),但谷歌并没有告诉我为什么这个问题不起作用,所以这里就说。

    我有一个函数append…字段,它接受任意数量的参数,第一个是要添加字段的ID,下面所有的只是字段的名称。它被破解了,所以可能有一些事情我可以改进。此函数出现在由rails生成的导入的script type=“text/javascript”标记中

    append_widget_form_fields = function(a){
      var widget_el = $(arguments[0]);
      var new_li = Element.new("li", class : widget_el.id, id : widget_el.id+"_new");
      for (var field in arguments) {
        if (field == arguments[0]){} // ignore first arg.
        else { //inserts fields into <li>
          Element.insert(new_li, { bottom : get_input_box_from_field_name( field , widget_el.id )});
        }
      } // inserts <li> into widget
      Element.insert(widget_el, { bottom : new_li });
    }
    

    不管怎样,我什么都看不见 错误的 就我如何定义它而言。我确实尝试在它前面添加一个var——没有帮助。函数的调用方式是:

    <input type="button" value="Add Fields" onclick="append_widget_form_fields('some_widget_id', 'headline', 'author', 'link');"/>
    

    补遗问题:JS应该在函数出现问题时出现语法错误,而不是取消定义,对吗?

    1 回复  |  直到 13 年前
        1
  •  1
  •   kangax    15 年前

    这里有几个问题:

    1. append_widget_form_fields 未申报。你要么申报 var 或将其更改为函数声明(即 function append_widget_form_fields(){...} )

    2. 没有 new 方法对 Element 在prototype.js中。然而, 元素 可以是 作为构造函数调用 - new Element(...) .

    3. 可能这里的主要问题是你使用 class . 在对象文本中,名称实际上在语法上是不允许的(在ES3中,因为它是“未来保留字”的一部分)。您应该引用它——“class”,或者改为“classname”(prototype.js理解)。