javaScript

Не нашли подходящего раздела? Вам сюда!

javaScript

Сообщение Колпаков Александр » 07 сен 2011, 21:29

Алексей, приветствую.
Вопрос: почему оператор "+" в javascript, не работает по своему прямому назначению, то есть не складывает? (Он только соединяет значения а и b)
Код: Выделить всё
function zhmi ()
{
var a=document.abc.a.value;
var b=document.abc.b.value;
var c=a+b;
document.abc.rezultat.value=c;
}

Все остальные операторы работают без нареканий...
Аватара пользователя
Колпаков Александр
Модератор
 
Сообщения: 78
Зарегистрирован: 03 июн 2011, 18:59
Откуда: Екатеринбург

Re: javaScript

Сообщение Алексей » 07 сен 2011, 22:48

Нужно принудительно определить переменные a и b как числа а не строки..
Вот так:
function zhmi ()
{
var a=Number(document.abc.a.value);
var b=Number(document.abc.b.value);
var c=a+b;
document.abc.rezultat.value=c;
}

Ведь можно написать a="Привет" и b="мир!!" и результатом будет c="Привет мир!!" т.е. сложатся строки - чего порой и нужно добиться.
Аватара пользователя
Алексей
Администратор
 
Сообщения: 834
Зарегистрирован: 03 апр 2010, 09:12
Откуда: Солнечный Геленджик :)

Re: javaScript

Сообщение Колпаков Александр » 15 сен 2011, 20:15

Алексей, добрый день!
Помогите пожалуйста.
Проблема такая:
При нажатии на изображение, Картинка увеличивается, а при отпусканий кнопки мыши уменьшается.
И вроде бы все хорошо, но есть одно но...: если сделать "короткое" нажатие на кнопку мыши, то картинка начинает дрожать.
Очень не приятное зрелище, знаете ли...
Обработчики событий следующие: <img src="image/guit.jpg" width="210" name="gitara" onMouseDown="big_pic();" onClick="small_pic();" />
А вот и сам сценарий:
Код: Выделить всё
function big_pic()
{
   var w=document.gitara.width;
      if (w < 350)
     {
       document.gitara.width = w + 7;
       document.gitara.src="image/guit.jpg"
       setTimeout("big_pic()", 50)
       }
}

function small_pic()
{
   var w=document.gitara.width;
     if (w > 210)
     {   
      document.gitara.width = w - 7;
      document.gitara.src="image/guit.jpg"
      setTimeout("small_pic()", 50)
       }
}   

Алексей, если вы в курсе почему так происходит, и как решить данную проблему, будьте добры подскажите.
С уважением, Александр
Аватара пользователя
Колпаков Александр
Модератор
 
Сообщения: 78
Зарегистрирован: 03 июн 2011, 18:59
Откуда: Екатеринбург

Re: javaScript

Сообщение Алексей » 16 сен 2011, 17:03

Если нажатие на фото "короче" чем время затраченное на полное разворачивание/сворачивание рисунка (350-210=140; 140/7= 20; 20*50=1000 миллисекунд) то начинается бесконечная "борьба" между функциями big_pic и small_pic одна прибавляет 7 единиц другая тут же вычитает 7 единиц и так до бесконечности.. отсюда и "дрожь" фото.
Чтобы этого не происходило нужно ввести дополнительное условие, что мол пока фото полностью не развернётся сворачивать его не стоит.. ну и наоборот соответственно..

Возможно есть более элегантное решение, но я пока вот так набросал:
Код: Выделить всё
<html>
  <body>

<img src="image/guit.jpg" width="210" name="gitara" onMouseDown="big_pic();" onClick="small_pic();" />

<script>
var x=0;
function big_pic()

   var w=document.gitara.width;
   if (x == 0)  // увеличиваем фото только в том случае если х=0
   {
         document.gitara.width = w + 7;
         document.gitara.src="image/guit.jpg"
         setTimeout("big_pic()", 50)
        if (w == 350){x=1} // если ширина фото увеличилась до 350 пикселей делаем х=1
   }
}
function small_pic()
{
   var w=document.gitara.width;
   if (x == 1)  // уменьшаем фото только в том случае если х=1
   {
         document.gitara.width = w - 7;
         document.gitara.src="image/guit.jpg"
         setTimeout("small_pic()", 50)
        if (w == 210){x=0} // если ширина фото уменьшилась до 210 пикселей делаем х=0
   }
   
}
</script>
</body>
</html>


Переменная x это типа заслонка которая при x==0 разрешает только увеличивать фото, а при x==1 только уменьшать несмотря на действия ("короткие" клики) со стороны пользователя.
Аватара пользователя
Алексей
Администратор
 
Сообщения: 834
Зарегистрирован: 03 апр 2010, 09:12
Откуда: Солнечный Геленджик :)

Re: javaScript

Сообщение Колпаков Александр » 18 сен 2011, 18:31

Алексей, добрый вечер.
Огромное спасибо за ответ. Очень помогло. Кстати, можно ли решить выше рассмотренную задачу с помощью цикла for?

Алексей, надеюсь я не сильно "нагружаю" Вас вопросами по javascript-у? (Вы только скажите, - отстану :laie: )
Дело в том, что такие мелочи в книгах и в интернете не описываются, но как раз на этих мелочах и застреваешь... (в общем, пожаловался :) ).

И еще один насущный вопрос, который день уже не могу разобраться...:
Вот код:
Код: Выделить всё
function avtorizacia ()
{
  var userID;
  var password;
  userID = document.registracia.userID.value;
  password = document.registracia.password.value;
  if(userID=='Александр' && password=='544733')
    {
    document.write('Добро пожаловать на сайт');
   }
  else if (userID=='Александр')
    {
    document.write('Имя указано верно, неверно указан пароль');
   }
  else if (password == '544733')
    {
    document.write('Пароль указан верно, имя неверно');
    }
  else
    {
    document.write('Данные указаны неверно');
   }
}

Вопрос: почему метод document.write, открывает новую вкладку, а не вписывает значение в текущий документ?
Другими словами, как научить браузер вписывать значения туда, куда необходимо?
Аватара пользователя
Колпаков Александр
Модератор
 
Сообщения: 78
Зарегистрирован: 03 июн 2011, 18:59
Откуда: Екатеринбург

Re: javaScript

Сообщение Алексей » 18 сен 2011, 22:19

можно ли решить выше рассмотренную задачу с помощью цикла for?

- Да можно.. ;)
Алексей, надеюсь я не сильно "нагружаю" Вас вопросами по javascript-у?

- Нет, всё нормально.
почему метод document.write, открывает новую вкладку, а не вписывает значение в текущий документ?

-Как только браузер завершает загрузку документа, document.write() уже не сможет вставить текст в загруженную страницу.. поэтому собственно и открывает в новом окне..

как научить браузер вписывать значения туда, куда необходимо?


Вот так:
Код: Выделить всё
<html>
  <body>
   <div id="abc"></div>
   <script>
     abc.innerHTML = "записываем строку туда куда надо.. а именно в блок div с идентификатором abc";
  </script>
</body>
</html>


Или например показывать ранее скрытые блоки меняя их стиль с style="display:none" на style="display:block".. или слои использовать вытаскивая их из глубины с помощью z-index..
Аватара пользователя
Алексей
Администратор
 
Сообщения: 834
Зарегистрирован: 03 апр 2010, 09:12
Откуда: Солнечный Геленджик :)

Re: javaScript

Сообщение Колпаков Александр » 05 окт 2011, 19:17

Алексей, вечер добрый.
Первый вопрос: раз пошла такая "пьянка", в плане вопросов по javascript, то может имеет смысл создать отдельную ветку форума по данной теме, вдруг, кому-нибудь еще будет интересно?
Второй вопрос: Массивы в javascript. По всей видимости, массивы очень полезны, но я никак не могу понять где их применяют. В сети не нашел ни одного толкового примера, который бы во всей "красоте" раскрыл полезность данного объекта.
Алексей, в общем вся надежда на Вас... ::)ok:
С уважением, Александр.
Аватара пользователя
Колпаков Александр
Модератор
 
Сообщения: 78
Зарегистрирован: 03 июн 2011, 18:59
Откуда: Екатеринбург

Re: javaScript

Сообщение Алексей » 05 окт 2011, 19:50

Вечер добрый.
Отдельную "толстую" ветку javascript создам когда будет одноименный учебник.. на данный момент не вижу особого смысла.. Пишите пока что сюда в раздел "разное" потом когда нибудь перемещу все темы отсюда..

По поводу массивов не буду далеко ходить посмотрите соседнюю ветку форума:
viewtopic.php?f=10&t=27

я имею ввиду вот этот код:
Код: Выделить всё
<html>
<body>

<h1>При обновлении страницы флеш будет другим</h1>

<script>
var banner = new Array()

<!-- Первый флеш -->
banner[0] = new Array()
banner[0][0] = "http://www.webremeslo.ru/ban1.swf" // абсолютный путь до 1го флеша
banner[0][1] = "400"// ширина 1го флеша
banner[0][2] = "60" // высота 1го флеша
<!-- Конец первого флеша -->

<!-- Второй флеш -->
banner[1] = new Array()
banner[1][0] = "http://www.webremeslo.ru/ban2.swf" //абсолютный путь до 2го флеша
banner[1][1] = "800" // ширина 2го флеша
banner[1][2] = "100" //высота 2го флеша
<!-- Конец второго флеша -->

<!-- еще сколько угодно флешев.. только в квадратных скобках нужно указывать следующий номер banner[2][0]-->

n = Math.random()*1 //случайное число

/* Math.random()*1 - количество используемых банеров (включая ноль) т.е. если было 3 банера тогда n = Math.random()*2 */

nb = Math.round(n)
document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="' + banner[nb][1] + '" height="' + banner[nb][2] + '"><param name="movie" value=' + banner[nb][0] + '/><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src=' + banner[nb][0] + ' quality="high" bgcolor="#ffffff" width="' + banner[nb][1] + '" height="' + banner[nb][2] + '" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>')
</script>

</body>
</html>


не знаю как насчет "красоты" но по-моему он хорошо демонстрирует работу массивов.

Цель данного скрипта смена баннера на другой при обновлении страницы.. ротатор короче..
Так вот есть у нас значит несколько баннеров под номерами: [0], [1], [2] и т.д. и у каждого из этих баннеров есть свои определённые свойства [0] -абсолютный путь, [1] - ширина и [2] - высота. Что мы делаем сначала определяем массив, а потом определив случайный баннер выдергиваем из этого массива недостающие данные собственно путь, ширину и высоту..

Разберитесь с этим кодом (кстати может реально пригодится когда то) и я думаю Вам станет понятно для чего нужны массивы.
Аватара пользователя
Алексей
Администратор
 
Сообщения: 834
Зарегистрирован: 03 апр 2010, 09:12
Откуда: Солнечный Геленджик :)

Re: javaScript

Сообщение Колпаков Александр » 08 окт 2011, 20:07

Алексей, добрый вечер.
1 Вопрос: подскажите пожалуйста, почему некоторые скрипты, не работают в: Google, Safari, IE.(В Mozilla и Opera, работают без проблем...):
Код: Выделить всё
var x=0;
function big_pic()
{
   var w=document.planeta.width;
   if (x == 0)  // увеличиваем фото только в том случае если х=0
   {
         document.planeta.width = w + 1;
         document.planeta.src="image/planeta.gif"
         setTimeout("big_pic()", 20);
        if (w == 165){x=1} // если ширина фото увеличилась до 350 пикселей делаем х=1
   }
}

Код: Выделить всё
function avtorizacia()
{
var userID;
var password;
userID = document.registracia.userID.value;
password = document.registracia.password.value;
if (userID == 'Александр' && password == '544733')
{
document.getElementById('stroka').innerHTML= userID + ', добро пожаловать на сайт';
}
else if(userID == 'Александр')
{
document.getElementById('stroka').innerHTML = userID + ', пароль указан неверно';
}
else if (password == '544733')
{
document.getElementById('stroka').innerHTML = userID + ', имя указано неверно';
}
else
{
document.getElementById('stroka').innerHTML = userID + ', данные неверны';
}
}

Заранее благодарю.
P.s. А с массивами мне еще видимо рановато. Тот код, который Вы привели в примере выше, пока мне не под силу разобрать.(смущают вторые скобки: banner[1][0]. со вторыми скобками все понятно, - номер элемента в массиве. а вот первые, ума не приложу для чего).

И еще один вопросик:
Касается увеличения изображения. Почему необходимо создавать ГЛОБАЛЬНУЮ переменную "X"? Если например я вписываю ее внутри функции, то изображение увеличивается бесконечно. Из-за чего так происходит?
Аватара пользователя
Колпаков Александр
Модератор
 
Сообщения: 78
Зарегистрирован: 03 июн 2011, 18:59
Откуда: Екатеринбург

Re: javaScript

Сообщение Алексей » 12 окт 2011, 23:12

Здравствуйте, извините за задержку с ответом, но у меня сейчас очень туго с выходом в Интернет, да и не до него сейчас если честно.
почему некоторые скрипты, не работают в: Google, Safari, IE.

К сожалению, на данный момент у меня нет под рукой необходимого инструментария – нормального редактора и собственно браузеров.. доберусь в 20х числах до своего кома поставлю эксперименты и возможно тогда отвечу на этот вопрос. Однако хочу отметить, что в IE6 эти скрипты работают.. помнится мне я в них ковырялся и тестил их именно в IE6 – я всегда всё тестирую IE6.
смущают вторые скобки: banner[1][0]. со вторыми скобками все понятно, - номер элемента в массиве. а вот первые, ума не приложу для чего

Да ничего сложного в массивах нет!.. так только названия страшные, а по факту ерунда.. вот и в этом, может быть не совсем удачном примере первые скобки определяют номер элемента – собственно номер баннера, а вторые дополнительно для баннера с этим номером указывают путь, ширину и высоту.
Почему необходимо создавать ГЛОБАЛЬНУЮ переменную "X"?

Ну код в исполняемой функции читается по кругу.. так вот если вставить переменную в тело функции то после каждого «оборота» она будет снова принимать х=0 даже если только что выполнено if (w == 165){x=1} и следовательно дальше продолжать увеличивать фото.
Аватара пользователя
Алексей
Администратор
 
Сообщения: 834
Зарегистрирован: 03 апр 2010, 09:12
Откуда: Солнечный Геленджик :)

След.

Вернуться в Разное

Кто сейчас на конференции

Сейчас этот форум просматривают: ixspfhdtq, yciffdrfl и гости: 11

cron
Рейтинг@Mail.ru