Jquery .Replacewith возвращает String - PullRequest
0 голосов
/ 01 августа 2020

Я хочу проверить, установлен ли мой флажок, и если он отмечен, я хочу заменить его меткой

for (var N = 0; N < Checkboxes; N++) {
    var thischeckbox = Checkboxes[N];
    if ($(thischeckbox).prop("checked") == true) {
        thischeckbox.replaceWith(function () {
            return $("<label> ticked <label/>")
        });
        // thischeckbox.removeAttribute("style");
    }
}

Но это возвращает для меня function () {return $ (отмечен) как строка это потому, что она находится в for и не может спокойно загружаться?

Ответы [ 3 ]

0 голосов
/ 01 августа 2020

У вас есть некоторые ошибки в вашем коде.

  1. in for l oop for(var N = 0; N < Checkboxes; N++) здесь вы не проверяете длину флажков, поэтому он не вводился в l oop,
  2. вы возвращали одну функцию внутри другой функции replaceWith(function () {return $("<label> ticked <label/>});, что может сбивать с толку semanti c переменную внешней области

var Checkboxes = $('[type=checkbox]');
for (var N = 0; N < Checkboxes.length; N++) {
  var thischeckbox = Checkboxes[N];
  if ($(thischeckbox).prop("checked") == true) {
            thischeckbox.replaceWith('ticked');
    //thischeckbox.removeAttribute("style");
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<input type="checkbox" checked><br>
<input type="checkbox"><br><input type="checkbox" checked><br><input type="checkbox"><br><input type="checkbox">
0 голосов
/ 01 августа 2020

Заключение этот флажок с jQuery ($) , предложенный другими, работает идеально.

Код:

        $(thischeckbox).replaceWith(function () {
            return $("<label> ticked <label/>")
        });

Если вы собираетесь заменить флажок только меткой, в использовании функции нет необходимости. Вместо этого вы можете передать элемент напрямую как параметр.

   $(thischeckbox).replaceWith($("<label> ticked <label/>"));

Рабочая демонстрация:

var checkboxes = $('[type = checkbox]')
var checkboxesLength = checkboxes.length;

function replaceCheckboxes(){
  for (var N = 0; N < checkboxesLength; N++) {
    var thischeckbox = checkboxes[N];
    if (thischeckbox.checked) {
        $(thischeckbox).replaceWith(function () {
            return $("<label> ticked <label/>")
        });
        //Alternate
        //$(thischeckbox).replaceWith($("<label> ticked12 <label/>"));
    }
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id='item1' type=checkbox />Item1 <br><br>
<input id='item2' type=checkbox />Item2 <br><br>
<input id='item3' type=checkbox />Item3 <br><br>

<br>
<button onclick='replaceCheckboxes()'>Replace </button>
0 голосов
/ 01 августа 2020

Похоже, вы забыли обернуть знак доллара thischeckbox, поскольку replaceWith также является методом jQuery, и вы возвращаете объект jQuery в обратном вызове

Попробуйте ниже:

$(thischeckbox).replaceWith(function () {
    return $("<label> ticked <label/>");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...