我在表行上有两个事件绑定,一个用于#! /usr/bin/env node
var start = Date.now();
var assemble = require('assemble');
var extname = require('gulp-extname');
assemble.task('assets', function () {
console.log(Date.now() - start);
assemble.data('assets/templates/data/*.json');
assemble.layouts('assets/templates/layouts/*.hbs');
assemble.partials('assets/templates/partials/*.hbs');
return assemble.src('assets/templates/*.hbs', { layout: 'default' })
.pipe(extname())
.pipe(assemble.dest('build/'));
});
assemble.task('watch', ['assets'], function () {
assemble.watch('./assets/**/*.*', ['assets]');
});
// Enable --watch command line
if (process.argv.pop() === '--watch') {
assemble.run(['watch']);
} else {
assemble.run(['assets']);
}
,因此我可以在更改之前获取文本输入的值。然后我将.change事件绑定到那个,所以我可以处理它,同时仍然具有前一个值。
但是,在.change函数中,“this”现在是正在更改的输入表,而不再是输入元素本身。我在这做错了什么?
focus
答案 0 :(得分:1)
$(".RowClassName").on("focus", ".columnClassName td:first-child input", ...)
^此调用解析为.RowClassName
元素,而不是您在事件委派过滤器中使用的input
元素。
尝试这样的事情:
var filter = ".columnClassName td:first-child input";
$(".RowClassName").on("focus", filter, function() {
previousName = this.value;
}).on("change", filter, function() {
$(this).width($(this).val().length * 9);
UpdateList(previousName, this.value);
});
答案 1 :(得分:1)
为什么this
引用该表已在其他答案中解释过。
为避免重复选择器,您可以存储在变量或pass an object事件处理程序中:
(function() {
var previousName;
$(".RowClassName").on(
{
focus: function() {
previousName = this.value;
},
change: function() {
$(this).width($(this).val().length * 9);
UpdateList(previousName, this.value);
}
},
'.columnClassName td:first-child input'
);
}());
答案 2 :(得分:0)
您将change
事件绑定到行,而不是输入;你应该尝试这样的事情:
var previousName = '';
$(".RowClassName").on("focus", ".columnClassName td:first-child input",
function() {
previousName = this.value;
})
$(".RowClassName").on("change", ".columnClassName td:first-child input",
function() {
$(this).width($(this).val().length * 9);
UpdateList(previousName, this.value);
});