Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Новичек (генератор глупых вопросов) (https://javascript.ru/forum/misc/9122-novichek-generator-glupykh-voprosov.html)

Хиросим 29.04.2010 21:57

Новичек (генератор глупых вопросов)
 
Здравствуйте, уважаемые.
Увлекся изучением JavaScript и уперся в стандартные проблемы. Читая статьи просветление легкое ощущается, но когда дело доходит до разбора чужого кода - полный ступор. Вот надеюсь тут найдутся добрые люди, помогут зеленому разобраться в командах и сокращениях...
первое недоумение вызвала эта строчка:
var a=document.MM_sr;

MM_sr похоже на имя переменной, но больше в коде она нигде не встречается, в справочниках по языку я тоже не нашел такой аббревиатуры.
Дальше :
x.src=x.oSrc;

вопрос соответственно вызывает oSrc
Дальше:
if (a[i].indexOf("#")!=0)
if((p=n.indexOf("?"))

вот это не понятно "#" "?"...

пока все... заранее благодарю понимающих и помогающих, остальные пожалуйста не утруждайтесь, сам знаю што выглядит это все глупо и урлы статей тематических я знаю...

Tim 29.04.2010 22:20

MM_sr и oSrc это некие свойства(переменные) объектов document и x соответственно. "#" "?"... это аргументы метода(функции) indexOf.

Метод indexOf Возвращает индекс позиции впервые встреченного искомого значения в вызванном объекте string.

Цитата:

Читая статьи просветление легкое ощущается
Лучше начать с библии http://javascript.ru/book/definitiveguide

p=n.indexOf("?")
т.е. p это позиция первого вхождения подстроки ? в строку n

Хиросим 29.04.2010 22:52

Неа, уважаемый Tim всеравно непонятно... вот полный код функции
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

она перезагружает исходную картинку при событии onMouseOut (которая перед этим была изменена событием onMouseOver). Применяется функция примерно так
<a href="basket.php"><img  onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image_b','','img/basketbutton3.gif',0)" src="Img/basketbutton.gif" name="Image_b" width="120" height="50" border="0"></a>

так на какой объект в этом случае указывает переменная "a" и что значит запись x.src=x.oSrc;???
А библию я давно скачал но читать такой скан с компа глазы не могут, а на бумаге в нашей деревне не продается...

Tim 30.04.2010 00:03

MM_sr должно встречаться где-то ещё т.к. это не есть стандартное св-во document. Убедитесь сами (сценарий выводит все св-ва и методы объекта document):

onload  = function()
{
	str = '';

	for (a in document) str += a + '\n';

	alert(str);
}



a - это локальная переменная функции MM_swapImgRestore указывающая на свойство MM_sr объекта document. Предположительно это массив.

x.src=x.oSrc - свойству src присвайвается значение свойства oSrc. Оба свойства принадлежат к объекту x т.е. являются переменными этого объекта.

Цитата:

а на бумаге в нашей деревне не продается...
В моей тоже, зато есть интернет магазины. Некоторые вещи мне удавалось доставать дешевле чем в обычных магазинах с учётом 1000 километровой доставки из Питера.

Хиросим 30.04.2010 01:48

Нуда так и есть, нашел я эти мутные свойства, в другой функции определялись, спасибо, Тим...

Хиросим 30.04.2010 16:26

Но это еще не все))))))))
Нашел я в интернете универсальный скрипт для замены изображений в зависимости от событий onMouseOut и onMouseOver.... скрипт выглядит так:
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


подключается так
<img  onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image_b','','img/basketbutton3.gif',0)" src="Img/basketbutton.gif" name="Image_b" width="120" height="50" border="0">


Посидев ночку, примерно разобрался как эта машинка работает, но при этом родил одну гениальную строчку для тойже задачи:
<img onMouseOut="this.src='img/basketbutton3.gif'" onClick="this.src='img/basketbutton2.gif'" onMouseOver="this.src='img/basketbutton.gif'" src="Img/basketbutton3.gif" name="immg" width="120" height="50" border="0">

без дополнительных функций, просто одна работающая строчка. И возникли у меня сомнения - не зря же люди городили набор жутких функций... может мое решение не кроссбраузерное или я еще каких то тонкостей не знаю....?????

Kolyaj 30.04.2010 16:28

Цитата:

Сообщение от Хиросим
при этом родил одну гениальную строчку для тойже задачи

Вот и чудненько, ибо не по всем скриптам можно учиться.

Цитата:

Сообщение от Хиросим
не зря же люди городили набор жутких функций

Зря.

Nekromancer 30.04.2010 16:33

Что за горе программист так обзывал переменные.. ужасно

Kolyaj 30.04.2010 16:45

MM_ -- Macromedia Dreamweaver.

Nekromancer 30.04.2010 16:56

аа.. ну блин :) я им и не пользовался

Хиросим 30.04.2010 17:05

ну здорева, што все так здорева...
еще вопросик.. событие onclick меня тревожит... если кликать на стандартные кнопки инпутов, то они переходят в нажатое состояние непосредственно при нажатии мыша,тоесть ели мыша не отпускать, кнопка держится в нажатом положении, с онкликом както странно все, такое впечатление, что он срабатывает когда кнопку мыша отпускаешь, поскольку все очень быстро, я даже не уверен срабатывает ли он.
просветите пожалуйста меня в этом вопросе.

Nekromancer 30.04.2010 17:07

onmousedown - опускание кнопки мыши
onmouseup - поднятие кнопки мыши
onclick - поднятие и опускание кнопки мыши
Над конкретным элементом естественно :)

Хиросим 30.04.2010 17:14

ну понятно.. это беда моя.... не внимательно читаю первоисточники, я с ней борюсь... спасибо!!

Хиросим 30.04.2010 18:38

Ну если я еще Вас не задолбал, то попрошу еще подсказки...
форма отправки электронного адреса для занесения его в базу mysql:
<form action="<?php echo $PHP_SELF?>" onSubmit="return my_mail('??????')" method="post" id="mail">
                <input name="text_mail" type="text" size="18" maxlength="30" onblur="this.value=(this.value==''?'Введите e-mail':this.value)" onfocus="this.value=(this.value=='Введите e-mail'?'':this.value)"  value="Введите e-mail"/>
                <input name="send_mail" type="submit" />
</form>

function my_mail() {
var a=my_mail.arguments;
var msg="Вы ввели следующий электронный адрес: " + a[0];
	if (confirm(msg)){
	  return true;
	} 
	else{
	return false;	
	}
}

Вот вопросики в аргументе функции my_mail, и вызывают сомнение, как передать туда значение поля, которое в момент отправки уже в глобальном массиве???
и можно ли менять текст на кнопках функции confirm???

Nekromancer 30.04.2010 19:49

<form action="http://javascript.ru/" onsubmit="return confirm('Вы ввели следующий электронный адрес: '+this.text_mail.value)" method="post" id="mail">
                <input name="text_mail" type="text" size="18" maxlength="30" onblur="this.value=(this.value==''?'Введите e-mail':this.value)" onfocus="this.value=(this.value=='Введите e-mail'?'':this.value)"  value="Введите e-mail"/>
                <input name="send_mail" type="submit" />
</form>

Хиросим 01.05.2010 01:02

Круто... Спасибо!!!

Хиросим 04.05.2010 17:58

Братцы, опять я уперся.. поможите!!
на старничке у меня расположился mp3 плеер:
<div id='pleer'>
<object type='application/x-shockwave-flash' data='mp3/template_maxi/player_mp3_maxi.swf' width='200' height='20'>
<param name='movie' value='mp3/template_maxi/player_mp3_maxi.swf' />
<param name='FlashVars' value='' />
</object>
</div>

По нажатию кнопок на сайте, в value последнего "парама" (FlashVars) должно поступать примерно такое значение "mp3=mp3/music/$al/$songz.mp3&amp;autoplay=1" где переменные al и songz идентифицируют путь к нужному файлу, ну и autoplay параметр автозапуска композиции. Вот так выглядит моя кнопка:
<div id='slushat-button'><button onclick=document.getElementsByTagName('param')[1].value='mp3=mp3/music/$al/$songz.mp3&amp;autoplay=1'>Слушать</button><br></div>

Все это располагается внутри PHP, ну и не трудно догадаться, что нифига не работает. Причем если ,как полагается, беру описание события онклик в одинарные кавычки, то браузер ругается на синтаксическую ошибку в следующей после кнопки строчке.
где не прав я????

Skipp 04.05.2010 18:06

<button  onclick="document.getElementsByTagName('param')[1].setAttribute('value','mp3=mp3/music/$al/$songz.mp3&amp;autoplay=1');">Слушать</button>

Хиросим 04.05.2010 20:06

Skipp, спасибо за ответ, как изменять атрибуты я понял, но всерно не работает, думаю это связано с особенностями работы плеера. Полазил в его мануалах и нашел рекомендации по подключению через яваскрипты, вот что получилось:
<script type="text/javascript">
function mju_play_track(num) {
<!--Останавливаю текущий трек (если он играет)	-->
document.getElementById("myFlash").SetVariable("player:jsStop", "");
<!--Меняю адрес музыкального файла на новый-->
document.getElementById("myFlash").SetVariable("player:jsUrl", "mp3/music/The_Beautiful_Game/Kidstuff.mp3");
<!--Запускаю плеер -->
document.getElementById("myFlash").SetVariable("player:jsPlay", "");
}
</script>

myFlash это id объекта с плеером.
При запуске через такую кнопку все работает:
<button  onclick="return mju_play_track()">Слушать</button>

НО как только я пытаюсь вынести адрес файла во внешнюю переменную, работать перестает... наверное я чтото с синтаксисом косячу???
<script type="text/javascript">
function mju_play_track(num) {
document.getElementById("myFlash").SetVariable("player:jsStop", "");
document.getElementById("myFlash").SetVariable("player:jsUrl", "num");
document.getElementById("myFlash").SetVariable("player:jsPlay", "");
}
</script>


<button  onclick="return mju_play_track('mp3/music/The_Beautiful_Game/Kidstuff.mp3')">Слушать</button>


Научите, пожалуйста как правильно????

Хиросим 04.05.2010 20:14

Все разобрался.. кавычки у переменной num в функции лишние!!


Часовой пояс GMT +3, время: 20:19.