Почему не работает this.getAttribute('href')

Тема в разделе "Другие языки", создана пользователем o_nix, 24 янв 2011.

Модераторы: Цукер
  1. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.037
    HTML:
    <!DOCTYPE html>
    <html>
    <body>
    
    
    <a href="javascript: var tag33=this.getAttribute('href'); alert(tag33);">далее</a>
    
    </body>
    </html>
    Собственно надо в скрипте переменной присвоить значение href элемента по которому кликнули определяется как this.getAttribute('href')

    но вот переменной почему то не присваивается. Переменная должна быть типа text функция её вроде так и возвращает по карйней мере window.open(this.getAttribute('href'));
    работает без проблем а вот присваиваться переменной ну никак не хочет :(

    Пример примитивный чисто для примера и пояснения.

    -----------------------------------------------
    разобрался
    url для перехода получался совсем в другом месте а this.getAttribute('href') не работает не там не там.
    тоесть он в принципе в такой вложеной конструкции неработоспособен
     
  2. FaLL3N

    FaLL3N Постоялец

    Регистр.:
    4 дек 2006
    Сообщения:
    100
    Симпатии:
    17
    потому как если this в ссылке, то он будет равен объекту Window, это равнозначно что ты вставишь значение href в адресную строку и выполнишь его, но относиться это значение ссылки (в данном примере яваскрипт) будет уже ко всему окну; если же тебе нужно обработать ссылку, - используй onclick для тега a, например:
     
  3. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.037
    FaLL3N
    нет у меня возможности юзать onclick

    попытаюсь объяснить
    this.getAttribute('href') - вызывается в функции а не по событию сделаному пользователем.
    сама эта функцция вызывается другой функцией - реагирующей на клик пользователя :D

    так вот в нужной мне функции тамже где
    window.open(this.getAttribute('href'));
    работает и отсылает пользователя по href по которому он кликнул
    мне необходимо записать этот href (чистый url без каких либо js) в переменную для дальнейшего использования в собственных целях.

    и вот хоть что делай а

    perem = this.getAttribute('href');
    или
    var perem = this.getAttribute('href');

    и ещё куча разных вариантов которые я перепробовал возвращают в пременную нечто что не является тем самым мне нужным url - а представляют из себя ХЗ что тк никак даже вывести немогу (alert не срабатывает) чтоб посмотреть что оно такое и в каком формате.

    причём это в не зависимости от того до window.open(this.getAttribute('href')); выполнять присвоение или после.
     
  4. FaLL3N

    FaLL3N Постоялец

    Регистр.:
    4 дек 2006
    Сообщения:
    100
    Симпатии:
    17
    есть возможность задавать id тегам <a> ?
     
  5. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.037
    скажем так всё то что касается <a> и <div> в который они вложены я трогать немогу - изза этого и такое извращение :D

    ну никак я не ожидал что this.getAttribute('href') не в контексте window.open будет возвращать чёрт знает что.
    может оно массив возвращает или что, как проверить то ??
     
  6. FaLL3N

    FaLL3N Постоялец

    Регистр.:
    4 дек 2006
    Сообщения:
    100
    Симпатии:
    17
    приведи ф-цию которая реагирует на клик. Чем расширенее будет вопрос - тем проще и быстрее будет найти ответ :)
    скрипт для дебага свойств и методов объекта:
    Код:
    function dumpProps(obj, parent) {
       // Go through all the properties of the passed-in object 
       for (var i in obj) {
          // if a parent (2nd parameter) was passed in, then use that to 
          // build the message. Message includes i (the object's property name) 
          // then the object's property value on a new line 
          if (parent) { var msg = parent + "." + i + "\n" + obj[i]; } else { var msg = i + "\n" + obj[i]; }
          // Display the message. If the user clicks "OK", then continue. If they 
          // click "CANCEL" then quit this level of recursion 
          if (!confirm(msg)) { return; }
          // If this property (i) is an object, then recursively process the object 
          if (typeof obj[i] == "object") { 
             if (parent) { dumpProps(obj[i], parent + "." + i); } else { dumpProps(obj[i], i); }
          }
       }
    }
    
    Как посмотреть что внутри:
    Код:
    <!DOCTYPE html>
    <html>
    <body>
    <a href="javascript:alert((this)); dumpProps(this)">далее</a>
    
    <script>
    function dumpProps(obj, parent) {
       for (var i in obj) {
          if (parent) { var msg = parent + "." + i + "\n" + obj[i]; } else { var msg = i + "\n" + obj[i]; }
          if (!confirm(msg)) { return; }
          if (typeof obj[i] == "object") { 
             if (parent) { dumpProps(obj[i], parent + "." + i); } else { dumpProps(obj[i], i); }
          }
       }
    }
    </script>
    </body>
    </html>
    
     
    o_nix нравится это.
  7. steel_HILL

    steel_HILL Постоялец

    Регистр.:
    15 апр 2010
    Сообщения:
    53
    Симпатии:
    14
    Запусти этот пример -

    HTML:
    
    <html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <title>NewDoc</title>
    <script type="text/javascript">
    <!--
    window.onload = WaitLoad;
    function WaitLoad(){
    	var span = document.getElementById('sp');
    	alert(span);
    	var link_arr = document.getElementsByTagName('a');
    	for (i=0; i<link_arr.length; i++){
    	alert(link_arr[i]);
    	if(link_arr[i].addEventListener){
    		link_arr[i].addEventListener('click', click_url, true);
    	}
    	else {
    		link_arr[i].attachEvent('onclick', click_url)
    	};
    	}
    }
    
    function click_url(event){
    	event = event || window.event;
    	var aim = event.srcElement || event.target;
    	alert('Переход по адресу: '+aim.href);
    	try{event.stopPropagation();event.preventDefault();}
    	catch(err){event.cancelBubble=true;event.returnValue=false;}
    
    };
    //-->
    </script>
    </head>
    
    <body>
    <a href="javascript://blablabla0">далее0</a>
    <a href="http://blablabla1">далее1</a>
    <a href="file://blablabla2">далее2</a>
    <span id="sp">123</span>
    </body></html>