Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замена и повторный поиск по id (https://javascript.ru/forum/misc/66541-zamena-i-povtornyjj-poisk-po-id.html)

danon_13 22.12.2016 00:39

Замена и повторный поиск по id
 
Добрый день
В js новичок

На странице есть select с различными значениями, справа от select input с Id
Когда в select выбираю дату то в инпут поставляется(пробовал так же и удалять и рисовать заново) Id по которому должен срабатывать выпадающий календарь календарь работает нормально т.е.есди изначально у инпута стоит этот id при загрузке страницы то при нажатии на инпут календарь выпадает
Если у инпута удалить I'd средствами js то при нажатии на инпут календарь все равно работает

Пробовал заново перерисовывать элемент - не срабатывает
Проьовал удалять файл со скриптом календаря со страницы - календарь как работал при нажатии так и работает
Замену I'd тоже пробовал - не помогает

Как я понимаю нужно заставить обойти заново страницу
Подскажите как это сделать или в чем моя ошибка?

рони 22.12.2016 02:13

danon_13,
в чём проблема?

danon_13 22.12.2016 10:57

Цитата:

Сообщение от рони (Сообщение 438626)
danon_13,
в чём проблема?

Проблема в том, что при вставке элементу нового идентификатора и удалении старого - событие клик как срабатывало по старому ID так и срабатывает
в случае перерисовки этого элемента т.к. полного удаления инпута и добавлении нового но уже с другим ID этот новый ID не срабатывает
т.е. даже обычный алерт не выводится

рони 22.12.2016 11:00

danon_13,
не осилил вашего описания

danon_13 22.12.2016 13:30

Цитата:

Сообщение от рони (Сообщение 438649)
danon_13,
не осилил вашего описания

http://site.pavlyuchenko.pro/cal.php
при нажатии на поле выдаст календарь (фаерфокс или хром)
далее поменяйте селекс дата отчета на что нибудь другое (выполнится скрипт http://site.pavlyuchenko.pro/assets/jq.js) и заменит инпут
далее снова выберите дата отчета - вставится тот же инпут который был ранее, но при нажатии на него календарь не выпадает, хотя ID снова указан тот что и был

рони 22.12.2016 14:07

danon_13,
нормальный способ: создали новый элемент, затем проинициализировали, при удалении разрушили виджет и затем удалили элемент.

но можно сохранить с помощью detach удалённый элемент а потом вернуть.

$(document).ready(function() {
    var datepicker;
    $("#form").change(function() {
        if (this.value == "data_otch") $(".for").html("").append(datepicker);
        else {
            datepicker = $("#datepicker-default").detach();
            $(".for").html('<input name="filtr" value="" class="form-control input-sm" id="" type="text">')
        }
    });
    $(".datepicker-default").click(function() {
        alert("123")
    })
});

danon_13 22.12.2016 15:28

Цитата:

Сообщение от рони (Сообщение 438658)
danon_13,
нормальный способ: создали новый элемент, затем проинициализировали, при удалении разрушили виджет и затем удалили элемент.

но можно сохранить с помощью detach удалённый элемент а потом вернуть.

$(document).ready(function() {
    var datepicker;
    $("#form").change(function() {
        if (this.value == "data_otch") $(".for").html("").append(datepicker);
        else {
            datepicker = $("#datepicker-default").detach();
            $(".for").html('<input name="filtr" value="" class="form-control input-sm" id="" type="text">')
        }
    });
    $(".datepicker-default").click(function() {
        alert("123")
    })
});

спасибо, буду пробовать

danon_13 22.12.2016 16:46

если выбрать по одному элементу из списка, а затем вернуться к первому то инпут пропадает
поэтому таким образом исправил решение

$(document).ready(function() {
    var datepicker;
	var p;
    $("#form").change(function() {
		if (this.value == "data_otch") {
			$(".for").html("").append(datepicker);
			p = 0;
		}
        else if(p == 1){
			p = 1;
        }
		else{
			p = 1;
			datepicker = $("#datepicker-default").detach();
            $(".for").html('<input name="filtr" value="" class="form-control input-sm" id="" type="text">');
			
		}
    });
});

Dilettante_Pro 22.12.2016 17:01

danon_13,
Загадочное действие
Код:

if(p == 1){
            p = 1;
        }
        else{

Может, достаточно
if(p != 1){
?

рони 22.12.2016 17:01

danon_13,
$(document).ready(function() {
  var datepicker;
  $("#form").change(function(){
    if (this.value == 'data_otch'){
      $(".for").html('')
      .append(datepicker);
    }
    else if($("#datepicker-default").length){
      datepicker= $("#datepicker-default").detach();
      $(".for").html('<input name="filtr" value="" class="form-control input-sm" id="" type="text">');
    }
  });
  });


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