Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Отключенный JavaScript (https://javascript.ru/forum/events/16845-otklyuchennyjj-javascript.html)

tores 25.04.2011 12:25

Отключенный JavaScript
 
Проблема такая! Есть форма авторизаций, котороя выпадает при нажатий на ссылку,
<script>
function showLoginWindow() 
 {
  document.getElementById("login").style.display="block"; 
  var hs=document.getElementById("hideshow");
  hs.innerHTML="Hide";
  hs.onclick=hideLoginWindow;
 }
function hideLoginWindow() 
 {
   document.getElementById("login").style.display="none";
   var hs=document.getElementById("hideshow");
   hs.innerHTML="Enter";
   hs.onclick=showLoginWindow;
   hs.style.display="block";
  }
</script>

HTML:

<body onload="hideLoginWindow()">
<a href="Files/registration.html"> Register</a>
<div>
 
<a style="display: none" id="hideshow" href="#" onclick="showLoginWindow()">Enter</a>
 
<div id="login">
 
<FORM action="" method="POST">
  Login: <INPUT type="text" name="lgn"><br> 
  Password: <INPUT type="password" name="pswd"> <br>
  <INPUT type="submit" name="enter" value="Enter"> 
 </FORM>
</div>
 
</div>
</body>


Мне нужно чтобы если отключен скрипт в браузере, то форма выводилась в окне,

проблема- все это делается но при каждом обновлении страницы эта форма видна из-за onLoad()

КАК БЫТЬ???? Предложите свой вариант по возможности!!!!!!!!За ранее спасибо!!!!!!

poorking 25.04.2011 12:44

сделайте ссылку чтобы она вела на страницу с авторизацией, а при window.onload найдите ее и поменяйте href на "javascript: void 0", и прикрутите обработчик, если js выключен, то ссылка будет просто вести на форму с авторизацией.

trikadin 29.04.2011 14:22

Зачем менять href? <a onclick="...; return false"> не катит?

trikadin 29.04.2011 14:41

Ну, или если мы за разделение содержания и скриптов, то так:

<a id="123" href="http://www.yandex.ru/">Текст</a>
<script>
a=document.getElementById("123");
a.onclick=function() {
  /* ваш код... */
  return false;
};
</script>

poorking 29.04.2011 20:21

trikadin,
Вы правы, но лучше уж тогда назначить обработчик на документ, смотреть на чем был клик и если на ссылке то принимать соответствующие меры, я думаю так лучше чем вешать обработчик на каждую ссылку
document.onclick = function(e){
		var trg = function(event){
			return event.target || event.srcElement;
		}(e || window.event)
		
		if(trg.tagName = "A"){
			doSomething(trg.href);
			return false;
		}
		
		
	}

alex_89 30.04.2011 10:27

А как все будет выглядеть в развернутом виде с js, html, css!!! А то я плохо понял!!!!!!!1

poorking 30.04.2011 10:51

Цитата:

Сообщение от alex_89 (Сообщение 102741)
А как все будет выглядеть в развернутом виде с js, html, css!!! А то я плохо понял!!!!!!!1

Никто не знает!!!!111 Вам в раздел работа!!!!111

monolithed 30.04.2011 21:07

poorking, можно же проще))
<script type="text/javascript">
document.onclick = function(event) {
    *!*var target = event ? event.target : window.event.srcElement;*/!*
    if(target.nodeName == 'A') {
        alert('Oops!');
    }
    return false;
};
</script>
<a href="#">click</a>

poorking 30.04.2011 21:25

monolithed,
trg.tagName = "A"
Присваивание поставил нечаянно, прямо тут писал, ошибся.
И вопрос, есть ли разница между nodeName и tagName если речь идет об Element (nodeType 1)? Вроде совпадают
<script type = "text/javascript">
window.onload = function(){
        var html  = document.getElementsByTagName("HTML")[0];	
        alert(html.tagName +"-"+ html.nodeName);
}
</script>

Цитата:

Сообщение от monolithed
можно же проще))

Учту обязательно :)

monolithed 30.04.2011 22:10

Цитата:

Сообщение от poorking
Вроде совпадают

<script type = "text/javascript">
var doc = document;    
alert(doc.tagName +"-"+ doc.nodeName);
</script>

Цитата:

Сообщение от poorking
есть ли разница между nodeName и tagName если речь идет об Element

nodeName представлен интерфейсом Node, а tagName Element
nodeName имеет все тоже самое, что tagName, плюс некоторые дополнения...
Attribute (attr name) | Text (#text ) | Comments (#comment ) | Document (#document) | DocumentFragment (#document-fragment)

poorking 30.04.2011 22:19

monolithed,
Это я знаю, я говорил
Цитата:

Сообщение от poorking
если речь идет об Element (nodeType 1)

Но все равно спасибо :)

trikadin 30.04.2011 22:37

Цитата:

Сообщение от poorking (Сообщение 102687)
trikadin,
Вы правы, но лучше уж тогда назначить обработчик на документ, смотреть на чем был клик и если на ссылке то принимать соответствующие меры, я думаю так лучше чем вешать обработчик на каждую ссылку
document.onclick = function(e){
		var trg = function(event){
			return event.target || event.srcElement;
		}(e || window.event)
		
		if(trg.tagName = "A"){
			doSomething(trg.href);
			return false;
		}
		
		
	}

Вот вообще не увидел каких-либо преимуществ вашего кода. Во-первых, каждый при клике браузер должен будет проверять, а не ссылке ли чел щёлкнул. А зачем? Это было бы понятно для больших AJAX-проектов, в нашем же случае ссылка уникальна, а следовательно, обработчик имеет смысл назначать только ей.

poorking 30.04.2011 22:55

trikadin,
Если ссылка одна то несомненно. А если новостная лента автоподгружающаяся аля фкантакте и их 100? вы каждой напишете свойство onclick?
PS тут где то есть похожая тема и я запутался, здесь да, ссылка одна. Виноват, каюс

trikadin 01.05.2011 00:28

Цитата:

Сообщение от poorking
Если ссылка одна то несомненно. А если новостная лента автоподгружающаяся аля фкантакте и их 100? вы каждой напишете свойство onclick?

Цитата:

Сообщение от trikadin
Это было бы понятно для больших AJAX-проектов

Собственно, я и говорю))

Цитата:

Сообщение от poorking
тут где то есть похожая тема и я запутался, здесь да, ссылка одна.

Никаких претензий)

alex_89 01.05.2011 20:17

Вы совсем запутали меня! Ссылка единственная, и сайт у меня с не большим контентом!!!!А фишка про переход на другую страницу прнравилась.Но все же объясните толком как должно все быть!!!

ВОТ МОЙ СКРИПТ:

<script>
02	function showLoginWindow()
03	 {
04	  document.getElementById("login").style.display="block";
05	  var hs=document.getElementById("hideshow");
06	  hs.innerHTML="Hide";
07	  hs.onclick=hideLoginWindow;
08	 }
09	function hideLoginWindow()
10	 {
11	   document.getElementById("login").style.display="none";
12	   var hs=document.getElementById("hideshow");
13	   hs.innerHTML="Enter";
14	   hs.onclick=showLoginWindow;
15	   hs.style.display="block";
16	  }
17	</script>

HTML:
HTML:

01	<body onload="hideLoginWindow()">
02	<a href="Files/registration.html"> Register</a>
03	<div>
04	  
05	<a style="display: none" id="hideshow" href="#" onclick="showLoginWindow()">Enter</a>
06	  
07	<div id="login">
08	  
09	<FORM action="" method="POST">
10	  Login: <INPUT type="text" name="lgn"><br>
11	  Password: <INPUT type="password" name="pswd"> <br>
12	  <INPUT type="submit" name="enter" value="Enter">
13	 </FORM>
14	</div>
15	  
16	</div>
17	</body>


Напишите полностью страницу пж-та
!!!

trikadin 02.05.2011 16:11

Вообще, просить написать страницу - наглость. :-E Можно спрашивать. Не понимаешь - уточняй. Не понимаешь совсем - учи матчасть. И не надейся, что в следующий раз тебе ещё раз так помогут.

<html>
<head>
<style>
#login {
	display: none;
}
#login.show {
	display: block;
}
</style>
</head>

<body>
	<a href="Files/registration.html"> Register</a>
	<div>
		<a style="display: none" id="hideshow" href="login.html">Enter</a>
		<!-- login.html - это страница, куда перейдёт пользователь с отключённым javascript -->
		<div id="login">
			<FORM action="" method="POST">
				Login: <INPUT type="text" name="lgn"><br>
				Password: <INPUT type="password" name="pswd"> <br>
				<INPUT type="submit" name="enter" value="Enter">
			</FORM>
		</div>
	</div>
<script src="hideshow_login.js"></script>
</body>
</html>


Содержимое файла hideshow_login.js:

// скрипт должен быть в конце, а не в начале, тогда он будет выполнен после того, как загрузится DOM
	function showLoginWindow()
	{
	document.getElementById("login").className+=" show"; // менять стили через javascript - плохо. Лучше определить отдельный класс
	var hs=document.getElementById("hideshow");
	hs.innerHTML="Hide";
	hs.onclick= function(){hideLoginWindow(); return false};
	};
	
	function hideLoginWindow()
	{
	document.getElementById("login").className.replace(" show", ""); // удаляем класс
	var hs=document.getElementById("hideshow");
	hs.innerHTML="Enter";
	hs.onclick= function() {showLoginWindow(); return false} // меняем обработчик на ссылке
	hs.style.display="block"; // не очень понял, зачем эта строка, поэтому не стал трогать...
	};
	
	document.getElementById("hideshow").onclick= function() {showLoginWindow(); return false}; // вешаем обработчик на ссылку, return false нужен, чтобы не произошло перехода на другую страницу

alex_89 04.05.2011 09:25

Большое спасибо за разяснение


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