2014-09-30 4 views
0

Функция не привязана к новому созданному ящику ввода. Пожалуйста, проверьте мой код по этой ссылкеПроблема с динамическим созданием DOM

[Пожалуйста, проверьте этот код] [1]

$("#datepicker").datepicker(); 
 

 

 
$("button").click(function(){ 
 
    
 
    $(".add").html('<input id="datepicker" placeholder="click here to open calendar " type="text" />'); 
 
    
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class='add'><input id="datepicker" placeholder="click here to open calendar " type="text" /></div> 
 
<button>Add input again </button>

depen.io/anon/pen/adLzi

+2

Пожалуйста, включите соответствующую ([MCVE] (http://stackoverflow.com/help/mcve)) код здесь, в вашем вопросе. Не ожидайте, что люди будут следить за ссылками в Интернете, чтобы помочь. –

ответ

0
$("button").click(function(){ 

    $(".add").html('<input id="datepicker" placeholder="click here to open calendar " type="text" />'); 

    // move to here your cod 
    $("#datepicker").datepicker(); 

}); 

$ (". add"). html (...) означает удаление и создание нового объекта DOM

затем потерянное значение $ ("# datepicker"). Datepicker();

+0

Мне нужно заменить контент. Не добавляйте. – Vis

+0

Thats ok..but why Эта функция не привязана к InputBox, которую мы добавили с помощью javascript? – Vis

+0

Что вы хотите? используя datepicker ??? – easywaru

0

Попробуйте

$("button").click(function(){ 
    $("#datepicker").val(""); 
    $("#datepicker").focus(); 
}); 

Demo

1

При нажатии на кнопку, это код, который выполняется:

$("button").click(function(){ 
    $(".add").html('<input id="datepicker" placeholder="click here to open calendar " type="text" />'); 
}); 

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

TL: DR, используйте этот код:

$("button").click(function(){ 
    var el = $('#datepicker'); 
    $.datepicker._clearDate(el); 
}); 

Редактировать

Даже я не знаю точные причины, почему это происходит, но это, вероятно, потому, что внутри, JQuery UI не имеет никакой связи предыдущего элемента DOM, и он остается висящим. Это также приводит к утечкам памяти.

0

Попытка переместить плагин инициализации в вашей document.ready функции:

$(document).ready(function() { 
$("#datepicker").datepicker();` 
}); 

$("button").click(function(){ 
 
    
 
    $(".add").html('<input id="datepicker" placeholder="click here to open calendar " type="text" />'); 
 
    
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class='add'><input id="datepicker" placeholder="click here to open calendar " type="text" /></div> 
 
<button>Add input again </button>

Смежные вопросы