JavaScript html Textarea получает Не удается прочитать свойство '1' из NULL - PullRequest
0 голосов
/ 09 декабря 2018

увидел видео на YouTube, в котором Chrome имеет Dev-инструменты, и запустил его для удовольствия, но обнаруживает проблему с совпадениями RegEx.exec, но не уверен, почему.

Несмотря на ошибку, функция работаетотлично подходит для IE и Chrome, как и ожидалось , но я не хочу опережать себя, прежде чем создавать больше кодов / страниц, пока эта нулевая ошибка не будет исправлена.

Это мой первый опыт использования javascriptсоздать свой собственный веб-инструмент автоматизации, работающий на моем компьютере, где я вставляю многострочный текст для извлечения совпадений данных с помощью Regexp.exec, а затем выполняю конкатенацию для своей работы в колл-центре.

из ChromeDevTool

Uncaught TypeError: Cannot read property '1' of null           ConcatenateNodeAddr.html:27 

Join_NE_TID @ ConcatenateNodeAddr.html.html:27

onpaste @ ConcatenateNodeAddr.html.html:8

line 27 = var NetworkElementTID = (NodeAddrMatch[1]+NodeAddrMatch[2]+NodeAddrMatch[3]);

Теперь запутался, почему мой код "работает", потому что я получил правильный вывод.Я нашел похожие вопросы в stackoverflow, но, похоже, в этих примерах RegEx не было совпадений, и я должен что-то упустить.

Чтобы использовать мой webtool, просто скопируйте "W WLBYTYPSH67 WMMM800D 0311.05B 113" в текстовую область

Я использовал регулярные совпадения regex101 и RegEx, несмотря на ошибку.

Match1 = WLBYTYPSH67 Match2 = 0311 Match3 = 05B

function ClearForm() {
  document.getElementById("TL1Form").reset();
}

function Join_NE_TID() {

  //  ## Extract NODE and Address to create TID //
  var InputName_NodeAddr = document.getElementsByName('NodeAddr')[0].value;
  var NodeAddrRegexp = /[\s\S]*\s([A-Z]{6}[A-Z0-9]{5})[\s\S]*\s([A-Z0-9]{4,6})(?:\.)([A-Z0-9]{3,5})\s[\s\S]*/;
  var NodeAddrMatch = NodeAddrRegexp.exec(InputName_NodeAddr);
  var NetworkElementTID = (NodeAddrMatch[1] + NodeAddrMatch[2] + NodeAddrMatch[3]);
  alert(NodeAddrMatch[1]); // alert shows the match //
  // ## Output Section  Node and Address ##  //
  var InputName_NodeAddrTID = document.getElementsByName('NodeAddrTID')[0];
  InputName_NodeAddrTID.value = (NetworkElementTID);

}
<form id="TL1Form">

  <!–– // ##  Define User Input Section ## // ––>
  <br /><b> Copy/Paste data between into text area<br/> ( W WLBYTYPSH67 WMMM800D 0311.05B 113 )</b><br />
  <textarea name="NodeAddr" rows="3" cols="27" placeholder="W  WLBYTYPSH67 WMMM800D  0311.05B  113" oninput="Join_NE_TID();" onpaste="Join_NE_TID();" /></textarea><br />
  <input type="button" onclick="ClearForm()" value="Reset form"><br /><br />

  <!–– //  ### Define Output Fields for Concatenation ### //––>
  <b>TID:</b> <input type="text" name="NodeAddrTID" size="25" placeholder="WLBYTYPSHAT031105B" /> <br /> The output is correct WLBYTYPSH67031105B
</form>

1 Ответ

0 голосов
/ 10 декабря 2018

Мне было интересно, что «document.getElementsByName» является проблемой, и изменил на «document.getElementID», но без изменений.Из того, что я нашел в w3schools, похоже, что метод идентификации сейчас является предпочтительным.

Похоже, что сценарий запускался дважды при вставке текста, а вторая итерация приводила к тому, что null обнаружил Chrome dev-tool, что могло объяснить, почему он работал, и я никогда не замечал проблемы.

Я удалил «onpaste» и сохранил «oninput», который, кажется, останавливает ошибку в Chrome Dev-Tool.Я подумал, что мне нужен и один для вставки, а другой для ввода с клавиатуры, мой плохой.

исправленный код:

<textarea name="NodeAddr" rows="3" cols="27" placeholder="W  WLBYTYPSH67 WMMM800D  0311.05B  113" oninput="Join_NE_TID();" /></textarea><br/>
...