Wie ändere ich den Stil in XPAGE dynamisch ??? Eigentlich möchte ich ein Etikett mit unterschiedlicher Farbe blinken?

StackOverflow https://stackoverflow.com/questions/9312219

Frage

Tween arbeitet nicht in xpages, ich habe die verwendet setTimeOut Funktion für Verzögerung.
Aber was nicht nach meiner Sorge funktioniert. alert arbeitet und wird verzögert, während sie benutzt setTimeOut Funktion. Aber der Stil des Stils funktioniert nicht ... tatsächlich funktioniert der letzte Beispiel der Aktion nur

Code, den ich verwendet habe, ist.

var t = 1;
var flag;

function doMove() {
    alert("Hi");
    t = t + 1;
    if ((t % 2) == 0) {
        document.getElementById("#{id:label1}").style.color = "blue";
        flag = test()
    }
    else {
        document.getElementById("#{id:label1}").style.color = "red";
        flag = test()
    }

}


function test() {
    var startTime = new Date().getTime();
    while (new Date().getTime() < startTime + 1000);
    return true;
}

for (var l = 0; l <= 2; l++) {
    doMove();
}  






XSP :    
Please see the following  
<xp:label value="Testing" id="label1" style="font-weight:bold;font-        size:14pt;color:rgb(255,0,0)">  
</xp:label>    
<xp:button value="Dojo" id="button3">  
    <xp:eventHandler event="onclick" submit="false">  
        <xp:this.script><![CDATA[    


var t = 1;  
var flag;  

function doMove() {  
    alert("Hi");  
    t = t + 1;  
    if ((t % 2) == 0) {  
        document.getElementById("#{id:label1}").style.color = "blue";  
        flag = test()  
    }  
    else {  
        document.getElementById("#{id:label1}").style.color = "red";  
        flag = test()  
    }  

 }  


 function test() {  
    var startTime = new Date().getTime();  
    while (new Date().getTime() < startTime + 1000);  
    return true;  
}  

for (var l = 0; l <= 2; l++) {  
    doMove();  
}      


    ]]></xp:this.script>  
    </xp:eventHandler>  
</xp:button>  
War es hilfreich?

Lösung

Ok, ich verstehe das Problem jetzt besser (sorry), aber es liegt an der für Schleife. Das Browser aktualisiert die Schnittstelle, nachdem alle Schleifen durchgeführt wurden. Ich habe einige Zeit damit verbracht und diesen Code entwickelt. Mit der maximalen Variablen setzen Sie die Häufigkeit, mit der er den Text blinkt. Ich hoffe, das wird das Problem lösen.

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" createForm="false">

    <xp:label value="Label" id="label1"></xp:label>


    <xp:eventHandler event="onClientLoad" submit="false">
        <xp:this.script><![CDATA[var t = 1;
var flag;
var max = 5;

function doMove() {   

    t = t + 1;   
    if (t > max){
        return;
    }
    if ((t % 2) == 0) {   
        document.getElementById("#{id:label1}").style.color = "blue";  

       flag = setTimeout(doMove, 1000);  
    }   

    else {   
        document.getElementById("#{id:label1}").style.color = "red"; 

      flag = setTimeout(doMove, 1000); 
    }



}   

doMove(); 

]]></xp:this.script>
    </xp:eventHandler>
</xp:view>

Andere Tipps

Versuchen Sie stattdessen stattdessen mit Dojo:

dojo.style("#{id:label1}", "color", "blue"); 

und

dojo.style("#{id:label1}", "color", "red"); 

Ihr Code funktioniert gut, daher muss es sich um einen anderen Code handeln, der Ihr Skript durchbricht. Ich habe dies einem neuen XPage hinzugefügt und es blinzelt rot und blau!

  <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:label value="Label" id="label1"></xp:label>
    <xp:eventHandler event="onClientLoad" submit="false">
        <xp:this.script><![CDATA[var t = 1; 
var flag; 

function doMove() { 
    alert("Hi"); 
    t = t + 1; 
    if ((t % 2) == 0) { 
        document.getElementById("#{id:label1}").style.color = "blue"; 
        flag = test() 
    } 
    else { 
        document.getElementById("#{id:label1}").style.color = "red"; 
        flag = test() 
    } 

} 


function test() { 
    var startTime = new Date().getTime(); 
    while (new Date().getTime() < startTime + 1000); 
    return true; 
} 

for (var l = 0; l <= 2; l++) { 
    doMove(); 
}]]></xp:this.script>
    </xp:eventHandler></xp:view>

Dies funktioniert ohne Alarm. Der Grund, warum Ihr Skript nicht funktioniert, da die Willensschleife die Benutzeroberfläche blockiert, bis es fertig ist. Es sieht so aus, als hätte es nichts getan, aber es tat es. Sie können es selbst testen, indem Sie Ihre HTML -Seite neue Elemente hinzufügen. Nach dem Skript sehen Sie mehrere Elemente, die hinzugefügt werden, wenn die Benutzeroberfläche aktualisiert wird.

Sie sollten die SetTimeout -Funktion wirklich verwenden, um dies zu funktionieren:

    <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" createForm="false">

    <xp:label value="Label" id="label1"></xp:label>


    <xp:eventHandler event="onClientLoad" submit="false">
        <xp:this.script><![CDATA[var t = 1;  
var flag;  

function doMove() {  

    t = t + 1;  
    if ((t % 2) == 0) {  
        document.getElementById("#{id:label1}").style.color = "blue"; 

        flag = setTimeout(doMove, 1000);
    }  

    else {  
        document.getElementById("#{id:label1}").style.color = "red";

        flag = setTimeout(doMove, 1000);
    }  

}  


for (var l = 0; l <= 2; l++) {
doMove();


}


]]></xp:this.script>
    </xp:eventHandler>
</xp:view>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top