Ich habe das folgende HTML:

<div id="box2">
    <p> this is some text and here is DAY 3 cool right </p>
    <!-- In the previous line, change DAY to something else -->
</div>
<br>
<select id="field"></select>

Das folgende korrekte Javascript füllt die Auswahl-Dropdown-Liste aus, wenn die Regex-Operation "Übereinstimmung" eine Übereinstimmung findet. Wenn ich jedoch den Wert von "Tag" in "Nacht" ändere, stoppt das gesamte Skript. Das Alarmfeld wird nicht ausgelöst. Fehlt ein Schritt?

var TextToSearch = document.getElementById('box2').innerHTML;
var result = TextToSearch.match(/DAY.*?</gi);
var select = document.getElementById("field");
if(result.length)
{
    for(var i = 0; i < result.length; i++)
    {
        var option = document.createElement("option");
        option.value = i+1;
        option.innerHTML = result[i];
        select.add(option);
    }
}
alert("test");

Hier ist eine Geige: https://jsfiddle.net/uooeLk2c/1/

2
COMisHARD 21 Aug. 2015 im 17:44

4 Antworten

Beste Antwort

Uncaught TypeError: Cannot read property 'length' of null

Stellen Sie sicher, dass Sie den Wert von result überprüfen, bevor Sie versuchen, die Eigenschaft .length abzurufen.

.match gibt null zurück, wenn keine Übereinstimmung vorliegt.

Ändern Sie if(result.length) für if(result !== null).

4
Halcyon 21 Aug. 2015 im 14:46

Ich denke so etwas sollte reichen ...

if (typeof result !== 'undefined' && result && result.length)
{
/* your code here*/
}
0
Leo128 21 Aug. 2015 im 15:01

Sie können OR || verwenden, wenn keine Übereinstimmung vorliegt. match() gibt null zurück, wenn keine Übereinstimmung gefunden wird. Wenn Sie length für null verwenden, wird ein Fehler ausgegeben.

Sie können || verwenden, um ein leeres Array zurückzugeben, wenn keine Übereinstimmung vorliegt.

var result = TextToSearch.match(/NIGHT.*?</gi) || [];

Auf diese Weise stellen Sie sicher, dass result unabhängig vom Status von match() immer ein array ist.

Demo

var TextToSearch = document.getElementById('box2').innerHTML;
var result = TextToSearch.match(/DAY.*?</gi) || [];
var select = document.getElementById("field");

if (result.length) {
  for (var i = 0; i < result.length; i++) {
    var option = document.createElement("option");
    option.value = i + 1;
    option.innerHTML = result[i];
    select.add(option);
  }
}
alert("No Error");
<div id="box2">
  <p>this is some text and here is night 3 cool right</p>
  <!-- In the previous line, change DAY to something else -->
</div>
<br>
<select id="field"></select>
6
Tushar 1 Sept. 2015 im 05:45

Sie müssen die Länge nicht überprüfen.

Überprüfen Sie einfach, ob die Variable vorhanden ist:

if (result) {

1
user4227915user4227915 21 Aug. 2015 im 15:01