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>
答案 0 :(得分:2)
也许尝试使用Dojo:
dojo.style("#{id:label1}", "color", "blue");
和
dojo.style("#{id:label1}", "color", "red");
答案 1 :(得分: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>
答案 2 :(得分: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>
答案 3 :(得分: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>