添加单选按钮

时间:2016-12-14 17:35:59

标签: javascript jquery placeholder

我使用下面的脚本来使用占位符,但是当我添加单选按钮时,脚本会中断。缺少什么?

var labels = document.querySelectorAll("label");
var i = labels.length;
while (i--) {
  var label = labels.item(i);
  var text = label.textContent;
  label.parentNode.classList.contains("required") && (text += " *");
  var nextElement = label.nextElementSibling;

  if (nextElement.tagName == 'SELECT') {
    nextElement.options[0].text = text;
   } else {
    nextElement.setAttribute("placeholder", text);
   }
  label.parentNode.removeChild(label);
}
var elements = document.querySelectorAll('.errors, .no-label');
Array.prototype.forEach.call(elements, function(el, i) {
  el.parentNode.removeChild(el);
});

这是jsfiddle:https://jsfiddle.net/katyhege/zdqLtmsn/

2 个答案:

答案 0 :(得分:1)

似乎当脚本中断时,它会显示nextElement undefined,因此您可以检查此内容。如果适合您,请尝试一次,

var labels = document.querySelectorAll("label");
    var i = labels.length;
    while (i--) {
    var label = labels.item(i);
    var text = label.textContent;
    label.parentNode.classList.contains("required") && (text += " *");
    var nextElement = label.nextElementSibling;

      // This is what I changed:
     if(nextElement){
       if (nextElement.tagName == 'SELECT') {
        nextElement.options[0].text = text;
       } else {
        nextElement.setAttribute("placeholder", text);
       }
     label.parentNode.removeChild(label);
     }
  }
var elements = document.querySelectorAll('.errors, .no-label');
Array.prototype.forEach.call(elements, function(el, i) {
el.parentNode.removeChild(el);
});

或者你可以再做一个解决方案, 只需替换

var i = labels.length;

var i = labels.length-2;

此外,您可以通过更改HTML来使其正常工作,这基本上会导致问题,您可以看到最后两个标签(用于单选按钮),您没有将输入(单选按钮)放在标签旁边但是你把它们放在标签之前,所以它找不到那里的下一个兄弟。如果您将标签旁边的无线电输入写入(正如您对其他输入所做的那样),那么它将正常工作。感谢。

祝你好运:)

答案 1 :(得分:0)

保留我使用的收音机/复选框字段的标签:

var labels = document.querySelectorAll("p.pd-text label, p.pd-select label, p.pd-textarea label");