Показать сообщение отдельно
  #1 (permalink)  
Старый 06.10.2009, 10:20
Новичок на форуме
Отправить личное сообщение для genya Посмотреть профиль Найти все сообщения от genya
 
Регистрация: 06.10.2009
Сообщений: 2

Неправильное формирование ссылки
Уважаемые участники форума, подскажите пожалуйста новичку-программисту ответ на следуйщий вопрос. В коде, который приведен ниже
(необходим еще рисунок для правильной работы), формируется ссылка - "Далее" (id=linktonextstep) в адрес которой включаются координаты двойных нажатий (после подстроки www.localhost.index.php?coords=). Сама строка строка формируется без проблем - перменная HREFSTR. Но при присвоении linktonextstep.href=String(HREFSTR); присваевается ссылке только часть строки. В итоге в строку адреса попадают
не все координаты двойных нажатий. Почему ??!!!
Заранее спасибо, за ответы

Полный код моей задачи:
<script language=javascript>
//**********
var NumDblClick=0;
var HREFSTR='www.localhost.index.php?coords=';
//Рисуем линии тегами IMG        
	    function line(ArrCoordsX1,ArrCoordsY1,ArrCoordsX2,ArrCoordsY2)
		{
//Обнуляем строку, которая будет хранить список всех тегов точек
		   StrPoints='';

for(IndexImgLines=0;IndexImgLines<ArrCoordsX1.length;IndexImgLines++)
{ 
x1=ArrCoordsX1[IndexImgLines];
y1=ArrCoordsY1[IndexImgLines];
x2=ArrCoordsX2[IndexImgLines];
y2=ArrCoordsY2[IndexImgLines];

//Определяем координаты, расположенные левее и переназначаем их, чтобы пара x1, y1 была левой координатой
			if(x1>x2)
			{
				tmpx=x2;
				tmpy=y2;
				x2=x1;
				y2=y1;
				x1=tmpx;
				y1=tmpy;
  		   }
//Определяем параметры функции для прорисовки линии y=y0+kx		 
		   k=(y2-y1)/(x2-x1);
		   y0=y1-k*x1;
//Формируем начало тега рисунка точек, общее для всех точек		   
		   xcomm='<img src=s.bmp width=2,height=2 style=\'position: absolute; top: ';
//Начинаем строить график линии слева направо	   
		   for(i=x1;i<=x2;i++)
		   {  
  		      yi=0;
//Вычисляем ординату точки по формуле линии y=y0+kx плюс учитываем смещение рисунка относительно начала окна
		   	  yi=Math.round(Number(y0)+k*i)+Number(objmap1.style.posTop)
//Вычисляем абциссу точки с учетом сдвига рисунка относительно начала окна 
			  xi=Number(i)+Number(objmap1.style.posLeft);
//Формируем строку - тега отображения рисунка
			  StrPoints+=xcomm+yi+';left:'+xi+'\'>';
//Блок для заполнения пробелов между точками (чтобы линия выглядела сплошной линией, а не набором точек)
//Заполнение идет сверху вниз каждый раз, когда две соседние точки по оси абцисс отображаются с пропуском
//пиксела по оси ординат 
			  
			  if (i!=x1)
			  {
//Находим максимальную и минимальную ординату из двух соседних точек по оси абцисс
			     if ((yprev>yi))
			     {
			  	    ysmall=yi;
				    ybig=yprev;
			     }
			     else
			     {
			  	    ysmall=yprev;
				    ybig=yi;			
			     }
//Проводим вертикальную линию в точке xi от минимальной ординаты к максимальной 
			     for(j=ysmall+1;j<ybig;j++)
			     {
			  	    StrPoints+=xcomm+j+';left:'+xi+'\'>';		
    		     }
		      }  
			  yprev=yi;
		   };
}
//Отображаем сформированные точки в окне браузера		   
		   container.innerHTML =StrPoints;
		   
		   
		  
		   
           		
		};
		    
   
        function ProcessingImg(StrPoints)
        {
		//Определяем координаты пиксела, по которому был сделан клик 
		

	
		
		

		
		
		CoordX=window.event.x+document.body.scrollLeft;
		
		CoordY=window.event.y+document.body.scrollTop;

	//objmap1.style.posLeft
		//В этом условии определяем координаты предыдущего клика в зависимости от содержимого ссылки
		//для этого
		//Определяем, является ли эта точка первой
		Prev='';
		LastIndex=0;
		ProcessYCoord=true;
		
		PrevCoordY='';
		PrevCoordX='';
		
		if (HREFSTR.charAt(HREFSTR.length-1)!='='){
			//Определяем
			
		
		   ArrCoords=new Array();
		   ArrCoordsX1=new Array();
		   ArrCoordsY1=new Array();
		   ArrCoordsX2=new Array();
		   ArrCoordsY2=new Array(); 
		   OldCoordY=CoordY;
		   OldCoordX=CoordX;
		   indexURL=Number(HREFSTR.length)-1;
		   CountXY=0;
		   PrevCoord='';
		   
		 
		    
		   while(HREFSTR.charAt(indexURL)!='=') 
		   {
			 
			  if (HREFSTR.charAt(indexURL)==',')
			  {
			  	  
			      
				 if (ProcessYCoord)
				 {
					PrevCoordY=PrevCoord;
					ProcessYCoord=false;
					PrevCoord='';	
				    
				 }
				 else
				 {
					ArrCoordsX1[CountXY]=Number(OldCoordX);
					ArrCoordsY1[CountXY]=Number(OldCoordY);
					ArrCoordsX2[CountXY]=Number(PrevCoord);
					ArrCoordsY2[CountXY]=Number(PrevCoordY);
					
			
					OldCoordX=PrevCoord;
					OldCoordY=PrevCoordY;
					ProcessYCoord=true;
					PrevCoord='';
					CountXY=CountXY+1;
				 }
			 }
        	 else
			{	
				 
				 PrevCoord=HREFSTR.charAt(indexURL)+PrevCoord;
			}
			indexURL=Number(indexURL)-1;
			
		  };  

		  ArrCoordsX1[CountXY]=Number(OldCoordX);
		  ArrCoordsY1[CountXY]=Number(OldCoordY);
		  ArrCoordsX2[CountXY]=Number(PrevCoord);
		  ArrCoordsY2[CountXY]=Number(PrevCoordY);
		   
		  line(ArrCoordsX1,ArrCoordsY1,ArrCoordsX2,ArrCoordsY2);
        };

//Расставляем запятые в зависимости от того, является ли пара координат первой в списке
		if(HREFSTR.charAt(HREFSTR.length-1)!='=')		 
		HREFSTR=HREFSTR+','; 
//Добавляем в ссылку координаты клика
		HREFSTR=HREFSTR+CoordX+','+CoordY;
		if (NumDblClick>1)
		{

			linktonextstep.href='';
                                  	linktonextstep.href=String(HREFSTR);
			alert(HREFSTR);

		} 
		NumDblClick=NumDblClick+1;
}  
</script>


<a name='linktonextstep' href='stop&coords='>Далее</a>
<img id='objmap1' src='1.png' width=1000 height=1000 onDblClick='ProcessingImg()' STYLE='position: fixed'>
<div id='container'></div>
Ответить с цитированием