我正在开发一个应用程序,该应用程序允许用户创建新项目,编辑现有项目或通过其旁边显示的相应图标删除项目。
对于现有项目,该操作图标会很好地显示在悬停以及附加到其上的事件处理程序上,在本例中为onClick事件处理程序。
$(document).ready(function() {
var ul = `
<ul class="list-inline in-item" style="padding: 10px;">
<li><a href="#"><i class="fa fa-plus-circle icon-add"></i></a></li>
<li><a href="#"><i class="fa fa-pencil-square-o icon-edit"></i></a></li>
<li><a href="#"><i class="fa fa-trash-o icon-remove"></i></a></li>
<li><a href="#"><i class="fa fa-arrows-v icon-move"></i></a></li>
</ul>
`;
$('.item').hover(
function() {
$(ul).insertBefore($(this).find('.item-head'));
},
function() {
$(this).find('ul.list-inline').remove();
});
$('body').on('click', '.icon-add', function() {
// Add Item
items = `
<div class="item">
<h3 class="item-head" contenteditable>[Type Item Here] [label]</h3>
<p contenteditable>[Type what it does]</p>
</div>
`;
// $('body').append(item);
$('.item-container').append(items);
return false;
});
$('body').on('click', '.icon-edit', function() {
// Edit on Item
});
$('body').on('click', '.icon-remove', function() {
// Remove Item and its definition
});
$('body').on('click', '.icon-move', function() {
// Move item to up or down
});
})
.item-head {
color: #365efe;
}
.action-icon {
float: left;
margin-top: 25px;
margin-left: -40px;
}
.icon-add {
color: #4caf50;
}
.icon-edit {
color: #00bcd4;
}
.icon-remove {
color: #f44336;
}
.icon-move {
color: #9e9e9e;
}
.in-item {
display: block;
}
.out-item {
display: none;
}
.list-inline>li:last-child {
padding-right: 25px;
}
.list-inline {
float: left;
background: trasparent;
position: absolute;
left: -110px;
top: 12px;
height: 40px;
}
div.item {
position: relative;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<div class="col-sm-12">
<div class="message"></div>
<h3>Preview</h3>
<div class="container" style="border: 1px solid #ccc;width: 70%;">
<div class="row">
<div class="col-xs-12 item-container">
<div class="item">
<h3 class="item-head" style="float: left;">Customer [form]</h3>
<p style="clear: both;">Customer is module for recording information related to customer such as Name, Address, Date of Birth, Place of Birth, ID Number, etc.</p>
</div>
<div class="item">
<h3 class="item-head">First Name English [label]</h3>
<p class="definition">The name that was given to you when you were born and that comes before your family name. This field accept only English Character.</p>
</div>
<div class="item">
<h3 class="item-head">Salutation [label]</h3>
<p>A greeting in words or actions, or the words used at the beginning of a letter or speech. This field has values such as Mr, Ms, Miss.</p>
</div>
</div>
</div>
</div>
</form>
</div>
但是,通过添加图标创建的新项目没有附加的动作图标,也没有与现有图标相同的功能,因为它已经与现有项目完全相同。
如何使新创建的项目与现有项目一样工作?谢谢
答案 0 :(得分:1)
您不需要动态添加列表。写一次,重用它。
$(document).ready(function() {
$('.list-inline').mouseleave(function(){
$(this).hide();
})
$('body').on('mouseenter', '.item', function(e){
var topPosition = $(this).position().top + 10;
$('.list-inline').show().css('top', topPosition);
})
$('body').on('click', '.icon-add', function() {
// Add Item
items = `
<div class="item">
<h3 class="item-head" contenteditable>[Type Item Here] [label]</h3>
<p contenteditable>[Type what it does]</p>
</div>
`;
// $('body').append(item);
$('.item-container').append(items);
return false;
});
$('body').on('click', '.icon-edit', function() {
// Edit on Item
});
$('body').on('click', '.icon-remove', function() {
// Remove Item and its definition
});
$('body').on('click', '.icon-move', function() {
// Move item to up or down
});
})
.item-head {
color: #365efe;
}
.action-icon {
float: left;
margin-top: 25px;
margin-left: -40px;
}
.icon-add {
color: #4caf50;
}
.icon-edit {
color: #00bcd4;
}
.icon-remove {
color: #f44336;
}
.icon-move {
color: #9e9e9e;
}
.in-item {
display: block;
}
.out-item {
display: none;
}
.list-inline>li:last-child {
padding-right: 25px;
}
.list-inline {
background: trasparent;
position: absolute;
left: -110px;
top: 12px;
height: 40px;
}
div.item {
position: relative;
overflow: hidden;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<div class="col-sm-12">
<div class="message"></div>
<h3>Preview</h3>
<div class="container" style="border: 1px solid #ccc;width: 70%;">
<div class="row" style="position:relative">
<div class="col-xs-12 item-container">
<!-- list here -->
<ul class="list-inline in-item" style="display:none;padding: 10px;">
<li><a href="#"><i class="fa fa-plus-circle icon-add"></i></a></li>
<li><a href="#"><i class="fa fa-pencil-square-o icon-edit"></i></a></li>
<li><a href="#"><i class="fa fa-trash-o icon-remove"></i></a></li>
<li><a href="#"><i class="fa fa-arrows-v icon-move"></i></a></li>
</ul>
<div class="item">
<h3 class="item-head" style="float: left;">Customer [form]</h3>
<p style="clear: both;">Customer is module for recording information related to customer such as Name, Address, Date of Birth, Place of Birth, ID Number, etc.</p>
</div>
<div class="item">
<h3 class="item-head">First Name English [label]</h3>
<p class="definition">The name that was given to you when you were born and that comes before your family name. This field accept only English Character.</p>
</div>
<div class="item">
<h3 class="item-head">Salutation [label]</h3>
<p>A greeting in words or actions, or the words used at the beginning of a letter or speech. This field has values such as Mr, Ms, Miss.</p>
</div>
</div>
</div>
</div>
</form>
</div>
答案 1 :(得分:0)
@Ibra,非常感谢您提供的有帮助的答案,我将其作为答案。但是,我想分享我对问题的发现。
根据这篇帖子:is-it-possible-to-use-jquery-on-and-hover,我发现问题出在我的事件处理程序.hover()
上,我将其称为填充操作图标。
由于.hover()
在用JS创建的动态元素上效果不佳,并且在.hover()
处理程序上使用.on()
很奇怪,因此它阻止了我从动态元素调用动作图标
因此,从以上发布的建议答案中,它正在用以下内容替换.hover()
:
$(".selector").on({
mouseenter: function () {
//stuff to do on mouse enter
},
mouseleave: function () {
//stuff to do on mouse leave
}
});
因此,我像这样将.hover()
处理程序更改为事件处理程序.mouseenter()
和.mouseleave()
/**
* Show Action Icons on Mouse over and hide it
* on Mouse out
*/
$('body').on({
mouseenter: function () {
//stuff to do on mouse enter
$(ul).insertBefore($(this).find('.item-head'));
},
mouseleave: function () {
//stuff to do on mouse leave
$(this).find('ul.list-inline').remove();
}
}, ".item");
所以,我的应用程序是这样的
$(document).ready(function() {
var ul = `
<ul class="list-inline in-item" style="padding: 10px;">
<li><a href="#"><i class="fa fa-plus-circle icon-add"></i></a></li>
<li><a href="#"><i class="fa fa-pencil-square-o icon-edit"></i></a></li>
<li><a href="#"><i class="fa fa-trash-o icon-remove"></i></a></li>
<li><a href="#"><i class="fa fa-arrows-v icon-move"></i></a></li>
</ul>
`;
/**
* Show Action Icons on Mouse over and hide it
* on Mouse out
*/
$('body').on({
mouseenter: function() {
//stuff to do on mouse enter
$(ul).insertBefore($(this).find('.item-head'));
},
mouseleave: function() {
//stuff to do on mouse leave
$(this).find('ul.list-inline').remove();
}
}, ".item");
$('body').on('click', '.icon-add', function() {
// Add Item
items = `
<div class="item">
<h3 class="item-head" contenteditable>[Type Item Here] [label]</h3>
<p contenteditable>[Type what it does]</p>
</div>
`;
// $('body').append(item);
$('.item-container').append(items);
return false;
});
$('body').on('click', '.icon-edit', function() {
// Edit on Item
});
$('body').on('click', '.icon-remove', function() {
// Remove Item and its definition
});
$('body').on('click', '.icon-move', function() {
// Move item to up or down
});
})
.item-head {
color: #365efe;
}
.action-icon {
float: left;
margin-top: 25px;
margin-left: -40px;
}
.icon-add {
color: #4caf50;
}
.icon-edit {
color: #00bcd4;
}
.icon-remove {
color: #f44336;
}
.icon-move {
color: #9e9e9e;
}
.in-item {
display: block;
}
.out-item {
display: none;
}
.list-inline>li:last-child {
padding-right: 25px;
}
.list-inline {
float: left;
background: trasparent;
position: absolute;
left: -110px;
top: 12px;
height: 40px;
}
div.item {
position: relative;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<div class="col-sm-12">
<div class="message"></div>
<h3>Preview</h3>
<div class="container" style="border: 1px solid #ccc;width: 70%;">
<div class="row">
<div class="col-xs-12 item-container">
<div class="item">
<h3 class="item-head" style="float: left;">Customer [form]</h3>
<p style="clear: both;">Customer is module for recording information related to customer such as Name, Address, Date of Birth, Place of Birth, ID Number, etc.</p>
</div>
<div class="item">
<h3 class="item-head">First Name English [label]</h3>
<p class="definition">The name that was given to you when you were born and that comes before your family name. This field accept only English Character.</p>
</div>
<div class="item">
<h3 class="item-head">Salutation [label]</h3>
<p>A greeting in words or actions, or the words used at the beginning of a letter or speech. This field has values such as Mr, Ms, Miss.</p>
</div>
</div>
</div>
</div>
</form>
</div>
请让我知道是否有遗漏或要补充的内容。谢谢