Чтобы сделать динамический элемент выбираемым с помощью jQuery
Я пытаюсь сделать пункт 1, пункт 2 и пункт 3 доступным для выбора.
HTML:
<div id="container">
<ul id="outerUL"> //static
<li id="outerLI"> //dynamic
<ul id="innerUL"> //dynamic
<li>Item 1</li> //dynamic
<li>Item 2</li> //dynamic
<li>Item 3</li> //dynamic
</ul>
</li>
</ul>
</div>
JQuery:
$("#outerUL").delegate('li','click',function(event) {
$(this).selectable();
});
Я не могу обнаружить ошибку.
5 ответов
Сначала проверьте, есть ли у вас верная версия jQuery, и скачайте ее отсюда.
Проблема с кодом
$("#outerUL").delegate('li','click',function(event) {
$(this).selectable();
});
в том, что:
$(this).selectable();
будет вызываться только при нажатии на некоторые li child
под outerUL
, Таким образом, ваш первый щелчок не выберет какой-либо элемент, а просто сделает выбор готовым.
Вторая проблема в этом HTML-фрагменте:
<ul id="outerUL"> //static
<li id="outerLI"> //dynamic
<ul id="innerUL"> //dynamic
<li>Item 1</li> //dynamic
<li>Item 2</li> //dynamic
<li>Item 3</li> //dynamic
</ul>
</li>
Согласно вашему коду JavaScript, каждый элемент, который является дочерним #outerUL
должно быть выбрано. Таким образом, первый раз, когда дети #outerUL
нажата, $(this).selectable();
будет называться заявление, которое сделает ребенок outerLI
по выбору. На последующие клики, JQuery's selectable()
Функция будет вызвана и выберет полную outerLI
элемент.
Я думаю, что это должно решить вашу проблему:
$(function () {
$("#innerUL").selectable();
});
Это сделают только дети #innerUL
по выбору.
Попробуйте jQuery на ():
$(document).on('click','#outerUL li',function(event) {
$(this).selectable();
});
Попробуй это:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery UI Selectable - Default functionality</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css">
<style>
#feedback { font-size: 1.4em; }
#selectable .ui-selecting { background: #FECA40; }
#selectable .ui-selected { background: #F39814; color: white; }
#selectable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
#selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height: 18px; }
</style>
<script>
$(function() {
$( "#selectable" ).selectable();
});
</script>
</head>
<body>
<ol id="selectable">
<li class="ui-widget-content">Item 1</li>
<li class="ui-widget-content">Item 2</li>
<li class="ui-widget-content">Item 3</li>
<li class="ui-widget-content">Item 4</li>
<li class="ui-widget-content">Item 5</li>
<li class="ui-widget-content">Item 6</li>
<li class="ui-widget-content">Item 7</li>
</ol>
</body>
</html>
Или читайте здесь. Надеюсь, вам понравится!
В документации по jQuery API вы можете прочитать:
Начиная с jQuery 1.7, метод.delegate() был заменен методом.on().
Вы должны использовать jQuery.on()
$("#outerUL").on('click', 'li', function(event) {
$(this).selectable();
});
Вам не нужна какая-либо функция, просто проверьте эту FIDDLE
$(function () {
$("#selectable").selectable();
$('#btn').click(function(){
$('#selectable').append('<li class="ui-widget-content">XXX</li>')
})
});
HTML
<ol id="selectable">
<li class="ui-widget-content">Item 1</li>
<li class="ui-widget-content">Item 2</li>
<li class="ui-widget-content">Item 3</li>
<li class="ui-widget-content">Item 4</li>
<li class="ui-widget-content">Item 5</li>
<li class="ui-widget-content">Item 6</li>
<li class="ui-widget-content">Item 7</li>
</ol>
<input type="button" id="btn" value="ADD" />