Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Получения ID по onclick (https://javascript.ru/forum/events/53591-polucheniya-id-po-onclick.html)

ghostcom 10.02.2015 07:39

Получения ID по onclick
 
Помогите пожалуйста! Проблема такова:
есть массиы приходящие с сервера в виде каталога. При клике беру ID кликнутой строки и подставляю его в следующий запрос, таким образом перехожу в подкоталог. Все бы ни чего, но при переходе в еще на один уровень ниже нужно взять следующий кликнутый ID+ParentID, а наверно в памяти остается уже ненужный ID первого вызова, т.к. происходит это в Ajax.
Теперь код:
var requestUrl = 'https://api2.mysite.ru?json';
    var request = {
                 key: '0000',
                 method: 'Catalogs'
                  };
    var data = 'data=' + JSON.stringify(request);
	$.ajax({
           url: requestUrl,
          type: 'POST',
      dataType: 'json',
          data: data
          })
	  .done(function(data) {
           for (json in data) {
  
	       document.write('<li class="cat" ID="' + data[json].id + '" ParentID="' + data[json].parent_id + '" ><button class="catalog">' + data[json].name + '</button></li>')
           
	  
	    
	$(function(){
	   $(".cat").on('click',function(event) { // кликаем по списку получаем ID и ParentID
		 $("li.cat").remove();                //удаляем список
		 	
	   })})}})
// вазываем следующий ур.(эдентичный запрос. отличие в var request{params})

var requestUrl = 'https://api2.mysite.ru?json';
    var request = {
                 key: '0000',
                 method: 'PodCatalogs',
                 params: {
                       catalog_id : this.ParentID, // ? как мне четко прописать откуда я это взял(уровни отличаются только классом)
		       section_id : this.ID,          // ? как мне четко прописать откуда я это взял(уровни отличаются только классом)
                  };
    var data = 'data=' + JSON.stringify(request);
	$.ajax({
           url: requestUrl,
          type: 'POST',
      dataType: 'json',
          data: data
          })
	  .done(function(data) {
           for (json in data) {
  
	       document.write('<li class="PodCat" ID="' + data[json].id + '" ParentID="' + data[json].parent_id + '" ><button class="catalog">' + data[json].name + '</button></li>')
           
	  
	    
	$(function(){
	   $(".PodCat").on('click',function(event) { // кликаем по списку получаем ID и ParentID
		 $("li.PodCat").remove();                //удаляем список
		 	
	   })})}})

Надеюсь понятно изложена суть. Если что переспрашивайте. Спасибо!

рони 10.02.2015 09:47

Цитата:

Сообщение от ghostcom
document.write

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

ghostcom 10.02.2015 16:33

Да, я читал. Но при смене метода массив не отображается. Спасибо за ответ! А что бы вы посоветовали использовать вместо document.write, просто это мой первый скрипт.

рони 10.02.2015 16:50

ghostcom,
http://learn.javascript.ru/multi-insert
и в jquery с десяток методов от .html() до .append()

рони 10.02.2015 16:52

ghostcom,
var data = 'data=' + JSON.stringify(request); это лишнее

ghostcom 10.02.2015 17:02

Цитата:

Сообщение от рони (Сообщение 355994)
ghostcom,
var data = 'data=' + JSON.stringify(request); это лишнее

Хм,,, а без нее не хочит работать

ghostcom 10.02.2015 17:04

//это код, который должен заменить document.write на месте
                document.write = function(s) {
                var scripts = document.getElementsByTagName('script');
                var lastScript = scripts[scripts.length - 1];
                lastScript.insertAdjacentHTML("beforebegin", s); 
                }//конец

Это позволяет запись в DOM без перезаписи страницы. Где то на сайтах нашол.

ghostcom 10.02.2015 17:08

Сейчас буду все заново пробовать. Попозже отпишусь.Спасибо!!!

рони 10.02.2015 17:31

Цитата:

Сообщение от ghostcom
Это позволяет запись в DOM без перезаписи страницы

нафиг!!! document.write не должно быть в вашем коде совсем

ghostcom 10.02.2015 17:34

$("div").html('<li class="cat" ID="' + data[json].id + '" ParentID="' + data[json].parent_id + '" ><button class="catalog">' + data[json].name + '</button></li>')

Такой код выводит только последний элемент массива, подскажите как прикрутить цикл? Мне бы этот вариан как нельзя к стати) как раз нужен еще div.

ghostcom 10.02.2015 17:37

Цитата:

Сообщение от рони (Сообщение 356005)
нафиг!!! document.write не должно быть в вашем коде совсем

Ну во теперь все ясно)

ghostcom 10.02.2015 17:45

Просто надо вместо html использовать append!!!!

ghostcom 10.02.2015 17:50

Спасибо Рони! Это лучший форум!

ghostcom 11.02.2015 18:53

В общем перепробовал массу разных методов и не смог отобразить информацию должным образом! Вернулся опять к разбитому карыту и document.write. При чем и это не работает толком (см. 1 пост) и по этому опять поднимаю вопрос по ID в самом начале темы!!! Приму любую полезную информацию т.к. опять в тупике.:cray:

ghostcom 11.02.2015 19:07

И кстати append почему то игнорирует $(".cat").on('click',function(event)
и выводит сразу все уровни. Такой бардак получается div в div'e и на диве- ужас) как бы правильно прописать чтоб работало по клику? КОД В ПЕРВОМ ПОСТЕ!

рони 11.02.2015 19:15

ghostcom,
:-? сложно понять что делает ваш код и ещё непонятнее понять что вам непонятно.

ghostcom 11.02.2015 19:38

Мой код выводит каталог товаров поставщика полученый в виде масива.
По клику отправляю запрос на какой нибудь подкаталог и т.д. Чтоб отправить запрос нужно в переменной прописать ID и родительский ID полученные из предидущего массива. Два уровня вывожу последующие не могу. Не знаю как обьяснить лучше, sorry.

рони 11.02.2015 19:46

ghostcom,
ок но пас

ghostcom 11.02.2015 21:27

Еще вопросик, опять мучаюсь с append вроде есть сдвиг но,
Вопрос:
Допустим есть разные запросы к серверу как им присвоить имена чтоб можно было обращаться по отдельности. я сделал так
function name_a(){здесь мой код}

а вызываю так
name_a.apply(this);

с document.write это работало(
можно ссылочку на чтиво. как правильно групировать свой код или как оно правильно называется не знаю. Поэтому не могу через поиск найти что нужно)

рони 11.02.2015 21:45

ghostcom,
нечего мне вам пока сказать ...

рони 11.02.2015 21:49

ghostcom,
может вам тут помедитировать http://www.jstree.com/

ghostcom 13.02.2015 07:11

не хочу показаться навязчевым, но деваться не куда без советов не справлюсь.
Пытаюсь вывести несколько значений одного обьекта, выводит только одно
document.write('<li class="cat" id="' + data[json].id + '" parent_id="' + data[json].parent_id + '" ><button class="subsections">' + data[json].name + '</button></li>')
$(function(){
            $('.cat').click(function(event){
		    var parent_id = this.parent_id;
                    var id = this.id;            
	     })
	   })
     alert(this.id,this.parent_id)

id выводит, а parent_id не могу как бы не прописывал.
пробовал с attr
var parent_id = $(this).attr('parent_id')

и опять id есть а parent_id нет!? WTF.
Подскажите как взять два значения, а то и три???
Может команда с var id прописана в библе поэтому и работает, а остальное не хочет(jquery-1.11.2.js)

рони 13.02.2015 07:52

ghostcom,
почему alert в строке 8 а не 5
document.write -- кактус - мыши кололись но ели
this.parent_id нет такого свойства
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">

  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

</head>

<body>
<script>
     var json = 0,
      data = [{
          id: 2000,
          parent_id: 5000,
          name: 'test'
      }]
  document.write('<li class="cat" id="' + data[json].id + '" parent_id="' + data[json].parent_id + '" ><button class="subsections">' + data[json].name + '</button></li>')
  $(function() {
      $('.cat').click(function(event) {
          var parent_id = $(this).attr('parent_id');
          var id = this.id;
          alert([id, parent_id])

      })
  })
</script>


</body>

</html>

ghostcom 13.02.2015 17:13

Спасибо, но я так и делаю. Почему в моем документе не работает:blink:
А можно рони вам в личку мой код кинуть?

ghostcom 13.02.2015 17:33

А подскажите возможно ли как то отчистить или делать сброс ячеек хранящих эти значения??

рони 13.02.2015 17:38

Цитата:

Сообщение от ghostcom
А подскажите возможно ли как то отчистить или делать сброс ячеек хранящих эти значения??

это вы счас с кем и о чём?

рони 13.02.2015 17:39

ghostcom,
может с азов начать -- как вставить элемент без jquery и document.write

ghostcom 13.02.2015 17:47

Цитата:

Сообщение от рони (Сообщение 356558)
это вы счас с кем и о чём?

Я с вами)) Да я уже сам не знаю о чем я

ghostcom 13.02.2015 17:52

Цитата:

Сообщение от рони (Сообщение 356559)
ghostcom,
может с азов начать -- как вставить элемент без jquery и document.write

Хотелось бы чтоб с Ajax работало, а по поводу document.write мне кажется что я уже все варианты перепробовал и не добился нужного результата. Недели три сижу мучаюсь 40 сторок туда сюда гоняю и нифига.

ghostcom 17.02.2015 19:08

Чтоб темы не плодить спрошу здесь
{
    "models": [
        {
            "key": 5268,
            "name": "Heart",
            "photo": {
                "code": "10839",
                "width": 800,
                "height": 601
            }
        }
    ],
    "items": {
        "010": {
            "article": "010",
            "id": "89",
            "name": "gavs",
             },
         
        }
}

как такой массив выводить? Интересует только сама структура
+ data?[json?].??? +

var requestUrl = 'https://ссссс?json';
    var request = {
                 auth_key: 'ссссссс',
		 params: {
					   page : 1,
					   limit : 20,
                         }
                  };
    var data = 'data=' + JSON.stringify(request);
	$.ajax({
           url: requestUrl,
          type: 'POST',
      dataType: 'json',
          data: data
          })  
	  .done(function(data) {
           for (json in data) {
			   var tr = document.getElementsByClassName("tr_items")[0];
				
                  var docfrag = document.createDocumentFragment();
                  var itemName = ['' + data[json].items.article + '']; // не работает
                  /*var photo = [''];*/
                     itemName.forEach(function(e) {
                         var td = document.createElement("td");
						 td.setAttribute("class", "itemName");
						 td.setAttribute("id", ' + data[json].id + '); // не работает
                         td.textContent = e;
                         docfrag.appendChild(td);
                          });
                 tr.appendChild(docfrag); 
	       
		   }

рони 17.02.2015 19:38

Цитата:

Сообщение от ghostcom
'' + items.article + ''; // не работает

if (json == "items"){
var obj = data[json];
for (var k in obj) {
if (obj[k]["article"]) {var itemName = obj[k] ["article"];}
}


}

примерно так

рони 17.02.2015 19:48

Цитата:

Сообщение от ghostcom
itemName.forEach

itemName = "010" - так что циклить нечего

ghostcom 17.02.2015 20:08

туплю, не могу вывести:D
а можно ваш код в мой вставить)

ghostcom 17.02.2015 20:09

Цитата:

Сообщение от рони (Сообщение 357035)
itemName = "010" - так что циклить нечего

Это не весь массив

рони 17.02.2015 20:43

ghostcom,
какую структуру вы хотите получить, html?

ghostcom 20.02.2015 21:18

сорри, не было время ответить.
в общем сделал так
for (var i in data.items) {}

+ data.items[i].article + 
 + data.items[i].id + 
 + data.items[i].name +

массив был такого вида
{
    "models": [
        {
            "key": 5268,
            "name": "Heart",
            "photo": {
                "code": "10839",
                "width": 800,
                "height": 601
            }
        }
    ],
    "items": {
        "010": {
            "article": "010",
            "id": "89",
            "name": "gavs",
             },
         
        }
}

ghostcom 20.02.2015 21:40

все хорошо, но опять не достаток знаний. гугл не помог.
делаю аякс запрос с двумя переменными получаю ошибку синтаксиса
var requestUrl = 'https://api2.site.ru?json';
          var request = {
                 auth_key: '2232223',
                 method: 'getS',
				 params: {
                                        items: {
					   articleI  : + articleII, // 1-ая и 2-ая переменная. проблема с первой!!!?
					   }}};
        var data = 'data=' + JSON.stringify(request);
	    $.ajax({
              url: requestUrl,
             type: 'POST',
         dataType: 'json',
             data: data
              })

Игрался с "",'',(),{},[] и т.д.
либо в запросе txt 'articleI',
либо в js - error(синтаксис).
ну ведь должен быть какой то способ???


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