Javascript replaceChild не показывает сообщение - PullRequest
0 голосов
/ 25 марта 2020

У меня есть этот код

 <!DOCTYPE html>
        <html lang="it">
        <head>
        <script>
        function insertAfter(newNode, referenceNode) {
            referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
        }
        
        
        function writeMess(node, mess){
        	elementEx= document.getElementsByTagName("br").length;
        	if(elementEx < 5){
        		newerrmess = document.createTextNode(mess);
        		node.replaceChild(newerrmess, node.firstChild);
        		br = document.createElement("br");
        		insertAfter(br, node);
        	}
        }
        
        
        function Add(){
        	try{
        
        		writeMess(nodoMessErr1, "");
        		var capsule = parseInt(nodoCapsule.value);
        
        		/* Check correct values */
        		if(!isNaN(capsule)){
        			totcapsule = capsule;
        		}
        		else{
        		/* Err Mess */
        		writeMess(nodoMessErr1, "Error Mess 1");
        		return;
        	  }
        	}	
        	catch( e ){
        		alert("Aggiunta " + e);
        		return;
        	}
        }	
        
        var nodoAdd;
        var nodoCapsule;
        var nodoMessErr1;
        var totcapsule;
        
        
        /* Core function */
        function gestoreLoad(){
        
        try{
        
        	nodoAdd = document.getElementById("aggiunta");
        	nodoCapsule= document.getElementById("capsule");
        	nodoMessErr1 = document.getElementById("adderr");
        
        	
        	nodoAdd.onclick = Add;
        	nodoCapsule.value = "";
        
        	var TextNodeErr_1= document.createTextNode("");
        	nodoMessErr1.appendChild(TextNodeErr_1);
        
        
        	}
        	catch(e){
        		alert("gestoreLoad " + e);
        	}
        }
        
        
        
        window.onload = gestoreLoad;
        </script>
        </head>
        <body>
        	<span id="adderr"></span>
        	
        	<input type="text" id="capsule" /> 
        	<input type="button" id="aggiunta" value="Add"/> 
        	
        
        
        </body>
        </html>

Функция writeMess работает как «писатель» сообщений (textnode), который добавляется как дочерний элемент span и ставит после span «
»

Посмотрите на функцию «Добавить», моя программа работает так, как если пользователь помещает значения NaN в «nodoCapsule.value», показывает сообщение об ошибке (по умолчанию «»), которое предупреждает его.

Я пытаюсь нажать кнопку ( id = "Aggiunta") записывает в него значения NaN, но сообщение не отображается (создается только "
", но перед ним нет текста)

Не знаю почему, какие-либо решения?

РЕДАКТИРОВАТЬ - Это зависит от браузера, другой браузер показывает мне сообщение об ошибке, но продолжает создавать «
». Я хотел бы только один "
", когда отображается сообщение об ошибке. И нет сообщения и нет br, где сообщение не отображается.

1 Ответ

1 голос
/ 25 марта 2020

Вам просто нужно проверить, есть ли уже тег br или нет

Вы можете проверить с помощью

if (node.nextElementSibling.tagName.toLowerCase() !== "br") {
     // add br
}

Рабочий пример

function insertAfter(newNode, referenceNode) {
    referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}


function writeMess(node, mess){
    elementEx= document.getElementsByTagName("br").length;
    if(elementEx < 5){
        newerrmess = document.createTextNode(mess);
        node.replaceChild(newerrmess, node.firstChild);
        if (node.nextElementSibling.tagName.toLowerCase() !== 'br') {
            br = document.createElement("br");
            insertAfter(br, node);
        }
    }
}


function Add(){
    try{
        debugger;
        writeMess(nodoMessErr1, "");
        var capsule = parseInt(nodoCapsule.value);

        /* Check correct values */
        if(!isNaN(capsule)){
            totcapsule = capsule;
        }
        else{
        /* Err Mess */
        writeMess(nodoMessErr1, "Error Mess 1");
        return;
      }
    }   
    catch( e ){
        alert("Aggiunta " + e);
        return;
    }
}   

var nodoAdd;
var nodoCapsule;
var nodoMessErr1;
var totcapsule;


/* Core function */
function gestoreLoad(){
debugger;
try{

    nodoAdd = document.getElementById("aggiunta");
    nodoCapsule= document.getElementById("capsule");
    nodoMessErr1 = document.getElementById("adderr");


    nodoAdd.onclick = Add;
    nodoCapsule.value = "";

    var TextNodeErr_1= document.createTextNode("");
    nodoMessErr1.appendChild(TextNodeErr_1);


    }
    catch(e){
        alert("gestoreLoad " + e);
    }
}



window.onload = gestoreLoad;
<body>
        	<span id="adderr"></span>
        	
        	<input type="text" id="capsule" /> 
        	<input type="button" id="aggiunta" value="Add"/> 
        	
        
        
        </body>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...