Функция JavaScript с произвольными аргументами из <head>недоступна в событии onclick - PullRequest
0 голосов
/ 20 сентября 2009

Хорошо, так что это может быть глупый вопрос (возможно, какой-то синтаксис), но Google не сказал мне много о том, почему это не работает, так что вот так.

У меня есть функция добавления полей _..._, которая принимает произвольное количество аргументов, первый из которых является идентификатором того, к чему нужно добавлять поля, а все последующие являются просто именами полей. Это взломано вместе, так что, возможно, есть пара вещей, которые я мог бы улучшить. Эта функция появляется в импортированном сценарии type = "text / javascript" в теге, созданном rails

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 });
}

В любом случае, я ничего не вижу неправильно с точки зрения того, как я это определяю. Я попытался добавить переменную перед всем этим - не помогло. Способ вызова функции:

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

Дополнительный вопрос: JS должен иметь синтаксическую ошибку, когда что-то не так с функцией, а не отбрасывать определение, правильно?

1 Ответ

1 голос
/ 20 сентября 2009

Здесь мало проблем:

  1. append_widget_form_fields не объявлено. Вы должны либо объявить его с помощью var, либо изменить его на объявление функции (т.е. function append_widget_form_fields(){...})

  2. В Element нет метода new в Prototype.js. Однако Element может быть , который называется конструктором - new Element(...).

  3. Вероятно, главная проблема здесь в том, что вы используете class. class имя фактически синтаксически запрещено в объектных литералах (в ES3, поскольку оно является частью "будущих зарезервированных слов"). Вы должны либо заключить его в кавычки - "class" - либо заменить на "className" (что понимает Prototype.js).

...