Итак, у меня есть эта исправленная структура HTML, на которую я не могу повлиять. Структура обеспечивается инструментом, в который вы добавляете поля выбора/ввода/и т. д. с помощью перетаскивания.
Например. обычное текстовое поле получает этот HTML-код:
<div id="d_001" class="field text ">
<label for="f_001" id="l_001">Shortdescription</label>
<input id="f_001" name="id1" value="" />
</div>
И текстовая область получит этот код:
<div id="d_002" class="field area ">
<label for="f_002" id="l_002">Description</label>
<textarea id="f_002" name="id2" cols="45" rows="5" ></textarea>
</div>
У меня также есть список выбора, который на основе выбранного элемента показывает/скрывает дополнительные информационные поля. Допустим, например, что список выбора содержит разную одежду. При выборе «брюки» становятся видимыми два поля ввода «длина» и «ширина». Когда вы выбираете "бюстгальтер", два поля ввода "размер чашки" и "обхват груди" становятся видимыми.
Итак, вот в чем дело: при выборе "брюки" в настоящее время система отправляет следующую информацию:
Short Descritption: Pants
Description: I would like to by black skinny jeans
Length: 32
Width: 32
Cup Size:
Underbust:
Немного погуглив, я узнал, что отключение невыбранных полей должно помочь. Но это не так. Он явно отключает поля, так как они серые и недоступны для редактирования, но они все равно передаются при отправке формы.
Основываясь на приведенных выше фрагментах HTML, я попытался отключить через
document.getElementsByTagName('input').disabled = true;
--> который отключает все поля ввода «ввод», но по-прежнему отправляет метку без содержимого. Хотя я не уверен, что он не отправляет контент или все еще отправляет пустой контент.
(да, это не включает списки выбора, текстовые области и т. д., но это второстепенная проблема, которую можно решить, выполнив то же самое для всех типов тегов)
Поэтому я подумал, что, возможно, мне нужно отключить все элементы в элементе div, что означает, что мне нужно также «отключить» метки через
documents.getElementsByTagName('label').disabled = true;
Я не слишком удивлен, что это не работает. Но поскольку я не могу отключить элементы div в целом, я действительно не знаю, чего мне не хватает. Есть ли что-нибудь еще, что заставляет поля быть отправленными? Я очень благодарен за любые подсказки, которые подталкивают меня в правильном направлении.
Редактировать:
По запросу я хочу добавить точный цикл, который отключает указанные поля ввода:
// list with links to make the items clickable
<ul id="myUL">
<li><a id="li1" title="pants" href="javascript:void(0)" onclick="returncontent(this);showpants();">Pants</a></li>
<li><a id="li2" title="bra" href="javascript:void(0)" onclick="returncontent(this);showbra();">Bra></li>
<li><a id="li3" title="tshirt" href="javascript:void(0)" onclick="returncontent(this);showtshirt();">T-Shirt</a></li>
<li><a id="li4" title="socks" href="javascript:void(0)" onclick="returncontent(this);showsocks();">Socks</a></li>
</ul>
// a var array containing the available class attributes
var elemente = ["pants","bra","tshirt","socks"];
// defining the functions triggered by the list
function showpants(){
howtocode(0);
}
function showbra(){
howtocode(1);
}
function showtshirt(){
howtocode(2);
wosOSD();
}
function showsocks(){
howtocode(3);
// have the function do different things depending on the selected list item
function howtocode(value){
var arrayLength = elemente.length;
for (var i = 0; i < arrayLength; i++) {
var classEle = document.getElementsByClassName(elemente[i]);
if (elemente[i] === elemente[value]){
changeStyle(elemente[i],classEle,"block");
setRequired(elemente[i],classEle);
}
else{
changeStyle(elemente[i],classEle,"block");
disableFields(elemente[i],classEle);
emptyFields(elemente[i],classEle);
}
}
}
function disableFields(ele, classEle){
for (var n = 0; n < classEle.length; n++) {
var inputfields3 = classEle[n].getElementsByTagName('input');
var textfield3 = classEle[n].getElementsByTagName('textarea');
for (var o = 0; o < inputfields3.length; o++){
inputfields3[o].disabled = true;
}
for (var p = 0; p < textfield3.length; p++){
textfield3[p].disabled = true;
}
}
}
а другие функции делают следующее:
- changeStyle() [устанавливает элемент div в значение "block" или "none"
- setRequired() [надеюсь, понятно сам по себе]
- emptyFields() [ сбрасывает все поля ввода, если выбранный элемент изменяется]
Я знаю, что в настоящее время это не работает. Я работаю над созданием скрипки.
Редактировать 2:
Итак, я нашел следующий код где-то в системных файлах JS/jQuery. Может ли это иметь какое-то отношение к этому? Пока я еще не понял, что он делает.
var data = elements.inject({ }, function(result, element) {
if (!element.disabled && element.name) {
key = element.name; value = $(element).getValue();
if (value != null && (element.type != 'submit' || (!submitted &&
submit !== false && (!submit || key == submit) && (submitted = true)))) {
if (key in result) {
// a key is already present; construct an array of values
if (!Object.isArray(result[key])) result[key] = [result[key]];
result[key].push(value);
}
else result[key] = value;
}
}
return result;
});
document.getElementsByTagName('input').disabled = true;
отключает все поля ввода» - нет, не отключает.getElementsByTagName
возвращает список узлов, и вы просто устанавливаете для свойстваdisabled
этого списка узлов значение true - который ничего не достигает. Вам нужно перебрать элементы, содержащиеся в этом списке, и установить отключенный атрибут для каждого из них по отдельности. - person 04FS   schedule 16.01.2020