- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 jQuery 开发一个类似待办事项的应用程序,但我想切换到 Angular。
有一个用于添加新项目的输入字段,但是一旦在此输入中输入任何内容,按键及其后面的按键就会有效地移动到现有项目组中的新项目。这意味着新项目输入文本框始终保持为空。展示比解释更好:
http://jsfiddle.net/29Z3U/4/ (删除了许多细节,但演示了我所指的应用程序的各个方面)。
<h1>Song List</h1>
<form id="songs">
<ul id="sortable_songs"></ul>
</form>
<ul id="new_song">
<script id="song_form_template" type="text/x-handlebars-template">
<li class="song" id="{{song_id}}">
<input type="text" placeholder="enter song" autofocus />
</li>
</script>
</ul>
一些 jQuery:
var template = Handlebars.compile($('#song_form_template').html()),
counter = (function(){var i=0; return function(){return ++i};})(),
cloneNewSong = function(){
var count = counter(),
templateVals = {song_id: 'song_' + count};
$('ul#new_song').append(template(templateVals));
},
addSong = function(event){
//exclude certain keys here
cloneNewSong();
container = $(event.target).closest('li.song');
container.appendTo('ul#sortable_songs');
$(event.target)
.removeAttr('placeholder')
.focus(); //what I just typed disappears without this! why?
};
$('ul#new_song').on('keypress', 'input', addSong);
cloneNewSong();
请注意,新项目输入文本框始终保持为空,并且焦点按其应有的方式运行,以便您可以继续输入而不会中断。
应用程序代码变得很长,我什至还没有尝试显示从 JSON 派生的现有歌曲列表。当然,在 Angular 中,ngRepeat 使这一切变得简单。但是,我对 Angular 版本的尝试不起作用:http://plnkr.co/edit/xsGRiHFzfsVE7qRxgY8d?p=preview
<!DOCTYPE html>
<html ng-app="songListApp">
<head>
<script src="//code.angularjs.org/1.2.7/angular.js"></script>
<link href="style.css" rel="stylesheet" />
<script src="script.js"></script>
</head>
<body ng-controller="songListController">
<h1>Song List</h1>
<ul id="songs">
<li ng-repeat="song in songs">
<input type="text" ng-model="song.song_name" />
</li>
</ul>
<form>
<input
ng-keypress="newSong(new_song)"
ng-model="new_song.title"
placeholder="enter song" autofocus
/>
</form>
</body>
</html>
JS:
var myapp = angular.module('songListApp', []);
myapp.controller('songListController', function($scope){
songs = [
{"song_name":"song 1","more_info":""},
{"song_name":"song 2","more_info":""},
{"song_name":"song 3","more_info":""}
];
$scope.songs = songs;
$scope.newSong = function(new_song){
var song = {"song_name": new_song.title, "more_info":""};
songs.push(song);
new_song.title = '';
};
});
在解决焦点管理问题之前,我注意到 Angular 模型的更新总是滞后一击键。我认为这是因为按键事件发生 before the character is inserted into the DOM 。
我意识到从按键切换到按键会改变一些事情,但最初的设计是基于按键的响应能力。
我尝试使用自定义指令绑定(bind)到 input event但事情并不像我希望的那样:http://plnkr.co/edit/yjdbG6HcS3ApMo1T290r?p=preview
我注意到 angularjs.org 上的第一个代码示例(没有 Controller 的基本绑定(bind))似乎没有遇到我遇到的问题 - 示例模型在 key 发布之前更新。
最佳答案
虽然有一个公认的答案,但我提出了一种不同的方法,该方法更简单, Controller 污染更少。
首先, Controller 。很简单。
myapp.controller('songListController', function($scope, $timeout){
$scope.songs = [
{"song_name":"song 1","more_info":""},
{"song_name":"song 2","more_info":""},
{"song_name":"song 3","more_info":""}
];
});
二、标签部分
<input ng-keypress="createAndFocusIn(songs)"
create-and-focus-in="#songs input"
placeholder="enter song"
autofocus
/>
解释一下,
createAndFocusIn(songs)
。 create-and-focus-in
指令提供了scope.createAndFocusIn()
,因此除非使用该指令,否则 Controller 不必具有此功能。它接受选择器,在其中创建新元素,在本例中为 #songs input
最后但最重要的是指令部分:
myapp.directive('createAndFocusIn', function($timeout){
return function(scope, element, attrs){
scope.createAndFocusIn = function(collection) {
collection.push({song_name: String.fromCharCode(event.keyCode)});
$timeout(function() {
element[0].value = '';
var el = document.querySelectorAll(attrs.createAndFocusIn);
el[el.length-1].focus();
});
};
};
});
在指令中,除了由属性指定之外,它没有做太多其他事情。
就是这样。
这是工作演示:http://plnkr.co/edit/mF15utNE9Kosw9FHwnB2?p=preview
---- 编辑 ----@KnewB 说它在 FF 中不起作用。 Chrome/FF 工作版本在这里。
在FF中,
http://plnkr.co/edit/u2RtHWyhis9koQfhQEdW?p=preview
myapp.directive('createAndFocusIn', function($timeout){
return function(scope, element, attrs){
scope.createAndFocusIn = function(ev, collection) {
collection.push({});
$timeout(function() {
element[0].value = '';
var el = document.querySelectorAll(attrs.createAndFocusIn);
el[el.length-1].focus();
el[el.length-1].value = String.fromCharCode(ev.keyCode||ev.charCode);
});
};
};
});
和$event
现已通过:
<input ng-keypress="createAndFocusIn($event, songs)"
create-and-focus-in="#songs input"
placeholder="enter song"
autofocus
/>
关于angularjs - 是否可以在按键之后但在按键之前更新模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21033635/
我的代码有问题。它总是忽略if(userDigit=1).. 谁能告诉我这里出了什么问题? for(i=0; i=1) { //
我正在尝试从字符串 html_doc 中提取 id=obj1 并尝试将 onclick 函数 附加到它 document.addEventListener("DOMContentLoaded", fu
我正在尝试使用 css 动画来动画化从一个类到另一个类的变化。基本思想是在用户单击按钮时为从一个边缘滑动到另一个边缘的 slider 设置动画。 到目前为止我的代码。 https://jsfiddle
我目前面临使用前后伪元素淡入导航项的问题。 当我悬停导航项时,它必须将其背景颜色从白色更改为蓝色。没什么疯狂的。但它也必须显示两个背景图像,分别通过将::before 伪元素从 0 更改为 1 和::
有没有简单的方法可以在最近的sqlite版本中修改表,使其与预定义的架构匹配? 架构: war_id INTEGER NOT NULL, clanname VARCHAR(64), clanhomep
我该如何将我的搜索结果变成这样的: http://i.stack.imgur.com/NfPGs.png 结果显示特定术语在单元格中的位置。 我目前有这个基本的搜索脚本: $terms =
我正在尝试使用按钮创建输入字段。但我想要的是,当创建输入字段时,我想用相同的按钮隐藏创建的输入字段。我尝试了 slideToggle 函数,但效果不是很好。 $('#addEmail').one('
我想做这样的事情: Reference of image. 我所做的:两个 UIImagesView,一个带有 UIViewContentModeLeft,另一个带有 UIViewContentMod
我在使用应该修复表中列的插入触发器时遇到了问题: id - auto increment int thread_id - int [NULL] 我想要实现的是将 thread_id 设置
我使用 tinter.after() 每 200 毫秒 刷新一次树莓派上模拟时钟的显示。一开始还可以,但逐渐地,每次刷新之间的时间达到大约 2-3 秒。是否有任何解决方案可以将刷新间隔保持在 200m
我有一个按钮,它使用::after 伪来填充背景。目前它从左到右填充,这在宽度从 0 到 100% 时有意义。但是,我希望它翻转它填充的方式。 a.project--link { margin:
我正在尝试添加带有伪元素:after的下划线来注释一些文本。 我的问题是,我想强调下划线。在此示例中,这是短语“实际上确实可以...”和“ ...不起作用”。 .test { margin-top
鉴于此: This is a test It is 有没有我可以应用到 的 CSS?那它会出现在“This is...”之前,并且在 PREVIOUS LINE 之前吗? float:left; d
我正在使用链接左侧的图像。 现在,我使用图像的::before 属性来显示,但它显示在链接的上方。 我需要对齐它。这是一张照片: Link 我使用的代码是: .vocabulary-duration
我有一个页脚有 与 6 body {background:#bbb;} .main-footer a::after { content: " | "; color: white; mar
我有一个父元素和一些子元素,但我不能直接更改它们的 CSS。所以,我试图在父元素的 CSS 中更改我 child 的 CSS。示例: .parent { & .child {
我可以 div:after { content: "hello" } 但我能否为 hello 文本添加标题,以便当我用鼠标悬停它时显示标题? 谢谢 最佳答案 你不需要伪元素: p { ba
CSS 2.1 :after 和 CSS 3 ::after 伪选择器(除了 ::after 旧浏览器不支持)?是否有任何实际理由使用更新的规范? 最佳答案 这是伪类与伪元素的区别。 除了 ::fir
「掏出钥匙开门,然后在黑暗中摸索着墙壁开关的位置,最后将室内的灯点亮。」 这是一个星期之前,我每天晚上下班回家时的固定戏码,也可能是大部分人每天回家时的经历。这种「一对一」的日常琐碎还有许多许
我正在尝试包装 , ,和具有 的元素修复我无法直接编辑的表单上的某些定位。由于某种原因,当我尝试使用以下代码时: $("label").before(""); $("input[type=tex
我是一名优秀的程序员,十分优秀!