JQuery学习

这星期主要用jquery的两个库函数和自己写的js做了个页面,两个<inpt>框进行任务的内容和截止时间的输入,截止时间的输入运用的是JQuery插件(laydate.js),下面的参与者的选择运用的是JQuery插件(magicsuggest.js).通过这两个插件的修改来实现时间框的弹出和在下拉框中选择文字在右边水平排布的功能。而这个界面最主要的功能就是将两个<input>框中的内容以及参与者的所有名字放在一个列表中,在下方进行排列,而且能保存在本地文件,不随刷新而改变。


(function() {

var lastdeletedID, lastdeletedTEXT, lastdeletedINDEX, count = 0;

function updateCounter() {
$('.count').text(count);
var deleteButton = $('.clear-all');//选取‘删除所有’按钮样式
if (count === 0) {
deleteButton.attr('disabled', 'disabled').addClass('disabled');//如果没有列表,按钮不可用
} else {
deleteButton.removeAttr('disabled').removeClass('disabled');//如果有列表,可正常使用
}
}
//返回列表的id
function generateId() {
return "reminder-" + +new Date();
}
//保存一个item到本地
var saveReminder = function(id, content) {
localStorage.setItem(id, content);
};
//编辑item
var editReminder = function(id) {
var $this = $('#' + id);
$this.focus() .append($('<button />', { //当点击编辑样式按钮时,改变它样式
"class": "icon-save save-button",
click: function() { //点击按钮时,使输入框不可以编辑

$this.attr('contenteditable', 'false');

var newcontent = $this.text(), //定义编辑完的内容
saved = $('.save-notification');

if (!newcontent) { //点击删除按钮,弹出显示框
var confirmation = confirm('Delete this item?');
if (confirmation) { //改变列表的id
removeReminder(id);
}
} else { //编辑完成,显示编辑的内容
localStorage.setItem(id, newcontent);
saved.show();
setTimeout(function() {
saved.hide();
}, 2000);
$(this).remove();
$('.icon-pencil').show();
}

}

}));
};

//将列表的内容和id从本地移除
var deleteReminder = function(id, content) {
localStorage.removeItem(id);
count--;
updateCounter();
};

//列表移除id变化
var removeReminder = function(id) {
var item = $('#' + id);
lastdeletedID = id;
lastdeletedTEXT = item.text();
lastdeletedINDEX = item.index();
//移除列表的css动画
item.addClass('removed-item')
.one('webkitAnimationEnd oanimationend msAnimationEnd animationend', function(e) {
$(this).remove();
});

deleteReminder(id);
//增加item当它内容不为空的时候
if (lastdeletedTEXT) {
UndoOption();
}
};
//增加列表内容
var createReminder = function(id, content, index) {
//定义列表样式
var reminder = '<li id="' + id + '">' + content + '</li>',
list = $('.reminders li');
//让截止时间框内容清除
$('#text1').val('')

//增加列表样式
if (!$('#' + id).length) {

if (index && index < list.length) {
var i = index + 1;
reminder = $(reminder).addClass('restored-item');
$('.reminders li:nth-child(' + i + ')').before(reminder);
}
if (index === 0) {
reminder = $(reminder).addClass('restored-item');
$('.reminders').prepend(reminder);
}
if (index === list.length) {
reminder = $(reminder).addClass('restored-item');
$('.reminders').append(reminder);
}
if (index === undefined) {
reminder = $(reminder).addClass('new-item');
$('.reminders').append(reminder);
}

var createdItem = $('#' + id);
//增加删除按钮
createdItem.append($('<button />', {
"class": "icon-trash delete-button",
"contenteditable": "false",
click: function() {
var confirmation = confirm('Delete this item?');
if (confirmation) {
removeReminder(id);
}
}
}));
//增加编辑按钮
createdItem.append($('<button />', {
"class": "icon-pencil edit-button",
"contenteditable": "false",
click: function() {
createdItem.attr('contenteditable', 'true');
editReminder(id);
$(this).hide();
}
}));
createdItem.on('keydown', function(ev) { //定义不能使用enter键
if (ev.keyCode === 13) return false;
});
//保存列表
saveReminder(id, content);
count++;
updateCounter();
}
};
//提交框内容
var handleInput = function() {
$('#input-form').on('submit', function(event) {
var input = $('#text'), //文本框
value = input.val() + ' [' + $('#text1').val() + ']'; //时间框
event.preventDefault();
if (value) {
//value=value+' 参与人:';
value = value + '————';
for (var i = 0; i < $(".ms-sel-item ").length; i++) {
value += $($(".ms-sel-item ")[i]).text() + ',';
}

var text = value.substr(0, value.length - 1);
//alert(text);
var id = generateId();
createReminder(id, text);
input.val('');
$("#ms-sel-ctn-0").html("");
}
});
};
//点击输入框时弹出的本地储存数据
var loadReminders = function() {
if (localStorage.length !== 0) {
for (var key in localStorage) {
var text = localStorage.getItem(key);
if (key.indexOf('reminder') === 0) {
createReminder(key, text);
}
}
}
};
//提交"删除所有"按钮并加上css3动画
var handleDeleteButton = function() {
$('.clear-all').on('click', function() {
if (confirm('Are you sure you want to delete all the items in the list? There is no turning back after that.')) { //remove items from DOM
var items = $('li[id ^= reminder]');
items.addClass('removed-item').one('webkitAnimationEnd oanimationend msAnimationEnd animationend', function(e) {
$(this).remove();
});

//寻找已经被删除和保存的在本地的item
var keys = [];
for (var key in localStorage) {
if (key.indexOf('reminder') === 0) {

localStorage.removeItem(key);
}
}
count = 0;
updateCounter();
}
});
};

var init = function() {
$('#text').focus();
loadReminders();
handleDeleteButton();
handleInput();
updateCounter();
};
//加载所有函数
init();

})();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值