0

Tween は Xpages で動作しませんsetTimeOut。遅延のためにこの機能を使用しました。
しかし、これは私の懸念として機能していません。alert関数の使用中に動作し、遅延していsetTimeOutます。しかし、スタイルの変更は機能していません...実際には、アクションの最後のインスタンスのみが機能しています

私が使用したコードは.

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>  
4

4 に答える 4

2

代わりに Dojo を使ってみてください:

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

dojo.style("#{id:label1}", "color", "red"); 
于 2012-02-16T19:18:48.353 に答える
0

わかりました、問題がよくわかりました (申し訳ありません)。しかし、それは for ループが原因です。すべてのループが完了すると、ブラウザーはインターフェースを更新します。私はこれに時間を費やし、このコードを思いつきました。max 変数を使用して、テキストを点滅させる回数を設定します。これで問題が解決することを願っています。

<?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>
于 2012-02-26T12:47:33.997 に答える
0

あなたのコードは正常に動作しているため、スクリプトを壊す他のコードである必要があります。これを新しい Xpage に追加したところ、赤と青で点滅しています。

  <?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>
于 2012-02-17T18:11:38.263 に答える
0

これはアラートなしで機能しています。willループが完了するまでユーザーインターフェイスをブロックしているため、スクリプトが機能しない理由。何もしなかったように見えますが、できました。HTML ページに新しい要素を追加して、自分でテストできます。スクリプトの後、ユーザー インターフェイスが更新されているときに複数の要素が追加されていることがわかります。

これを機能させるには、実際に settimeout 関数を使用する必要があります。

    <?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>
于 2012-02-23T23:23:43.493 に答える