Функции соединения / разделения JavaScript не работают в MS Edge - PullRequest
0 голосов
/ 31 октября 2018

Это странно. У меня есть текстовая область, содержимое которой изменяется путем выбора элементов в списке с помощью флажка для выбора. Если я сниму флажок, этот элемент должен быть удален из списка. Итак, в моей форме есть текстовая область: buildarea (это id)

Я использую JavaScript:

function SelectSection(form, id, checked)

// заполняет и удаляет текстовое поле в правой части с выбранными переменными

if (checked) {

  var checker = id.substr(5,100)
  $('#buildarea').append(checker);
  $('#buildarea').append("\r\n");
} else {

  var text = id.substr(5,100);
  var lines = $('#buildarea').val().split('\n');
  lines = lines.filter(function(val) {
    if (val.match(text)) return false
    else return true
  })
  $('#buildarea').text(lines.join('\n')).html();

}

средство проверки var просто удаляет ненужный текст в начале выбранного элемента, так что не беспокойтесь об этом. Итак, суть в том, что этот js отлично работает на Chrome, Firefox и IE (11)… но не работает в Microsoft Edge. Список переменных может выглядеть примерно так:

60637; hc_j18

59157; hc_b11_1

59162; hc_b11_2

59172; hc_b11_4

59027; hc_o0k

и если отменить выбор, скажем, 3-й элемент (оканчивающийся на _2), то в 3 упомянутых браузерах я получаю:

60637; hc_j18

59157; hc_b11_1

59172; hc_b11_4

59027; hc_o0k

Что идеально. НО в MS Edge я получаю:

60637; hc_j18

59157; hc_b11_1

59172; hc_b11_4

59027; hc_

Итак, хотя третий элемент был удален, у последнего элемента его имя обрезано после _ (подчеркивание). Мои навыки работы с javascript не являются блестящими, но мне интересно, видел ли кто-нибудь еще подобное поведение и как его можно преодолеть?

Большое спасибо

Пол

1 Ответ

0 голосов
/ 01 ноября 2018

Вы можете установить некоторые отладчики в функции SelectSection и использовать инструменты разработчика F12 для отладки своего кода и проверки значения (такого как: проверка и строки).

Согласно вашему описанию, я создаю пример, используя следующий код, он хорошо работает на моей стороне (в браузерах IE 11, Edge и Chrome), пожалуйста, обратитесь к нему.

<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="../Scripts/jquery-1.10.2.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("input[type='checkbox']").each(function (index, item) {
                $(item).click(function () {
                    var data = [];
                    //get the checked checkbox and get the value.
                    $("input[type='checkbox']:checked").each(function (index, item) {
                       data.push($(item).val());
                    })
                    $('#buildarea').text(data.join('\n')).html();
                });
            });
            $("#btnremoveitem").click(function () {
                var text = "59162;hc_b11_2";
                var lines = $('#buildarea').val().split('\n');
                lines = lines.filter(function (val) {
                    if (val.match(text)) return false
                    else return true
                })
                //get the specific checkbox and set the checked property.
                $("input[type='checkbox']:checked[value='59162;hc_b11_2']").prop('checked', false);

                $('#buildarea').text(lines.join('\n')).html();
            });
        });
    </script>
</head>
<body>
    <input id="Checkbox1" type="checkbox" value="60637;hc_j18" />60637;hc_j18 <br />
    <input id="Checkbox1" type="checkbox" value="59157;hc_b11_1" />59157;hc_b11_1<br />
    <input id="Checkbox1" type="checkbox" value="59162;hc_b11_2" />59162;hc_b11_2<br />
    <input id="Checkbox1" type="checkbox" value="59172;hc_b11_4" />59172;hc_b11_4<br />
    <input id="Checkbox1" type="checkbox" value="59027;hc_o0k" />59027;hc_o0k<br />
    <textarea id="buildarea" rows="10" cols="20"></textarea>
    <input id="btnremoveitem" type="button" value="Remove Item" />
</body>

Вывод, как показано ниже:

enter image description here

...