现在的问题是,单位是ie帮我转的(由px到pt)
因为我对v:polyline对象的points的设置就是用的px
请留意:
<v:polyline units="px" id="pl" filled="false" 
style="position:absolute;top:0px;left:0px" 
points="10,10 20,50">"10,10 20,50"就是的单位就是px单位。然后当我把它自己的东西赋给自己的时候(把points的值赋给它自己的时候),ie就帮我把他们转换了,而且那些值是完全不对应的!(经验证,它们的值都加倍了,所以,polyline对象的位置才会不停的变)

解决方案 »

  1.   

    呵呵,重点是position
    你每点一次input相当于重绘一次该线,因为原来的位置还被现有的poly占据所以absolute的该poly就下移了,不知道你名每明白
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html xmlns:v="urn:schemas-microsoft-com:vml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    <STYLE>
    v\:* { Behavior: url(#default#VML) }
    </STYLE>
    </head>
    <body onclick="alert(document.all.pl.points.value);">
    <div><v:polyline units="px" id="pl" filled="false" 
    style="position:relative;top:0px;left:0px" 
    points="10,10 20,50"> </polyline> </div>
    <input onClick="document.all.pl.points.value=document.all.pl.points.value;" value="button" type="button">
    </body>
    </html>
      

  2.   

    to sw47(我爱编程,脑筋好好,嗷嗷嗷嗷嗷...) 老兄:
    不知道你有没有发现alert出来的数据,虽然线的位置没有变但是points的那些数据还是在不停的加倍,能解释一下吗?
    谢谢。(其实我觉得你的说法应该不对,因为这里边的代码是我原来的代码的简单化,我原来的代码里边,取得数据和重画是在不同的页面里边的,意思是:先取得a页面的polyline的points数据,然后在b页面画出来,所以就不存在你说的:“原来的位置还被现有的poly占据”,所以我觉得问题并不是象你说的那样。)
      

  3.   

    你所提出的问题的原因可能在于你的赋值方式,
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html xmlns:v="urn:schemas-microsoft-com:vml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    <STYLE>
    v\:* { Behavior: url(#default#VML) }
    </STYLE>
    </head>
    <body onclick="alert(document.all.pl.points.value);">
    <div><v:polyline id="pl" filled="false" 
    style="position:relative;top:0px;left:0px" 
    points="10,10 20,50 15,3"> </polyline> </div>
    <input onClick="document.all.pl.points.value=x;" value="button" type="button">
    </body>
    </html>
    <script>
    var x=document.all.pl.points.value
    </script>
      

  4.   

    这段代码在我的机器上显示正常啊~~线也没有移动,每次显示的值都是一样的~~<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html xmlns:v="urn:schemas-microsoft-com:vml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    <STYLE>
    v\:* { Behavior: url(#default#VML) }
    </STYLE>
    </head>
    <body onclick="alert(document.all.pl.points.value);">
    <v:polyline units="px" id="pl" filled="false" style="position:absolute;top:0px;left:0px" points="100,100 20,50"> </polyline> 
    <input onClick="document.all.pl.points.value=document.all.pl.points.value;" value="button" type="button">
    </body>
    </html>
      

  5.   

    非常感谢sw47(我爱编程,脑筋好好,嗷嗷嗷嗷嗷...) 对这个问题的支持但是好象答案还不正确,请对比第一次点击页面后弹出的对话框的数据和点击button后弹出的对话框的数据,后者仍然是前者的两倍,用你的方法,弹出对话框的数据之所以不会不停的增长的原因只是由于x的值只被改变一次,以后就不会在被修改了。
      

  6.   

    确实如你所说,可能是vml的bug吧>?:D
    vml的许多元素在如果是createElement出来的话,没appendChild之前,他的points之类的属性是不可以添加的,这个可能也是因为这个原因,可能要从dom的角度考虑这个问题吧如果你想实现功能,可以变通一下~!~
      

  7.   

    1px=0.75pt
    在对线进行px单位的赋值前使用该规则转换原坐标为px单位的坐标
      

  8.   

    to  yonghengdizhen(IUnknown::AddRef()) :
    但是如果这样的话
    转换出来的值是不准确的啊。
    还有就是points有非常多个值的,如果一个个转比较浪费时间,效率会很低
      

  9.   

    先声明,vml我一点不懂,错了别砍我:P<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>vml</title>
    <STYLE>
    v\:* { Behavior: url(#default#VML) }
    </STYLE>
    </head>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function Equal(oldobj,newobj)
    {
    var oArr=oldobj.value.split(",")
    var nArr = newobj.value.split(",")
    for(var i=0;i<nArr.length;i++)
    oArr[i]=nArr[i]
    var re= oArr.join(",")
    return re;
    }
    //-->
    </SCRIPT>
    <body onclick="alert(document.all.pl.points.value)">
    <v:polyline units="pt" id="pl" filled="false" 
    style="position:absolute;top:0px;left:0px" 
    points="10,10,20,50"> </polyline> 
    <input onClick="Equal(document.all.pl.points,document.all.pl.points);" value="button" type="button">
    </body>
    </html>
      

  10.   

    谢谢这位老兄了不过我最最想不通的是为什么points的值会无故加倍呢。
      

  11.   

    document.all.pl.points是一个结构,而不是一般的数字
    对这个结构做赋值操作时ie的脚本解释器进行了一次操作符重载,问题应该是发生在=操作的时候,我个人想法:)
      

  12.   

    to  windancer(风精灵):经过我的检验,你写的程序是不合要求的,因为你的:
    Equal(document.all.pl.points,document.all.pl.points);是完全没有起到作用的
    不信你可以试试:Equal(document.all.pl.points,"10,20 30,40 50,60");当然函数也要做点小改动就是去掉newobj后边的alue.结果告诉我们你的函数是完全没有达到修改points.value的值的要求的。
      

  13.   

    to yonghengdizhen:
    其实我也想让步的,但是我刚刚发现,ie不但会把px自动的转换成pt,而且还会自动的转换成in!
    而且我不知道它什么时候是in什么时候是pt,真是晕死了!ms的ie真聪明啊!
      

  14.   

    倒!
    不好意思,我不知道document.all.pl.points的结构是怎么样的
    我以为是固定的"x,x,x,x"的结构
      

  15.   

    实际上是vml的com在实现属性时对getXxxx和putXxxx实现上对单位理解不一直导致的,
      

  16.   

    这个问题看来象是ie的bug了,多谢大家对这个问题的支持最后得出结论是:
    polyline对象的points.value与普通变量之间只能进行最多一次值的交换,否则原来的值会不停的加倍。