#javascript #forms #dojo
#javascript #формы #dojo
Вопрос:
Все,
Этот код javascript динамически добавляет поля ввода на основе выбора пользователем выпадающего списка. У меня это почти там, где нужно, но прямо сейчас оба случая «msds_copy» и «cofa_copy» отображают одни и те же данные для «html2» при тестировании. При выборе «msds_copy» во 2-м окне формы должно быть указано «Регион / язык», но вместо этого указано «Номер партии».
Есть идеи, почему это может происходить?
inquiry_type_onchange: function(e) {
var place_order = 1,
order_status = 2,
telalert_signup = 3,
invoice_questions = 4,
msds_copy = 5,
cofa_copy = 6,
html = null,
html2 = null,
inquiry = e.target,
id = "inquiry_type_addendum",
form_row = dojo.query("." id);
//Clear any possible previous additions.
if (form_row != null)
form_row.forEach(dojo.destroy);
//Add the correct new field to the form.
switch (inquiry.selectedIndex) {
case place_order:
html = this.create_form_row(id, "Account Number:");
break;
case order_status:
html = this.create_form_row(id, "Order Number:");
break;
case telalert_signup:
html = this.create_form_row(id, "Account Number:");
break;
case invoice_questions:
html = this.create_form_row(id, "Invoice Number");
break;
case msds_copy:
html = this.create_form_row(id, "Product Name:");
html2 = this.create_form_row(id "_2", "Region / Language:");
case cofa_copy:
html = this.create_form_row(id, "Product Name:");
html2 = this.create_form_row(id "_2", "Batch Number:");
default:
}
if (html == null) return;
//Place the new element below the inquiry_type field.
var placeat = dojo.byId('buttons');
dojo.place(html, placeat, "before");
if(html2!=null)
dojo.place(html2, placeat, "before");
},
create_form_row: function(id, label) {
//Container
var a = dojo.create("div", { id: id, className: "question inquiry_type_addendum", style: "padding-top:4px;" });
//Label
var b = dojo.create("div", { className: "label", innerHTML: label, style: "margin-top:8px;" }, a);
//Field
var c = dojo.create("div", { className: "field" });
var d = dojo.create("span", { className: "full_number_span span" });
var e = dojo.create("input", { type: "text", className: "textbox full_number", name: label }, d);
dojo.place(d, c);
dojo.place(c, a);
return a;
}
});
Ответ №1:
Вам не хватает ваших break
s, и выполняется случай переключения msds_copy
, а затем переходит к следующему случаю cofa_copy
.
case msds_copy:
html = this.create_form_row(id, "Product Name:");
html2 = this.create_form_row(id "_2", "Region / Language:");
break; // <----
case cofa_copy:
html = this.create_form_row(id, "Product Name:");
html2 = this.create_form_row(id "_2", "Batch Number:");
break; // <----
Комментарии:
1. Ого. Слишком долго смотрю на экран! Большое спасибо!