谁能帮我解决这个问题:
$('#n').click(function() {
$(this).parent().append('<a href="javascript:void()"> delete</a>');
$(this).next().click(function() {
alert('clicked'); //this not working
});
$(this).blur(function() {
$(this).next().remove();
});
});
JS Fiddle demo ;问题是 blur()
事件在 click()
事件之前执行。
最佳答案
您可以使用超时将删除操作推迟几毫秒。
示例:http://jsfiddle.net/vkun9/7/
$(this).blur(function() {
var _this = this;
setTimeout(function(){$(_this).next().remove();},100);
});
我还移动了blur
附加到点击处理程序之外,因为每次单击元素时它都会添加一个额外的点击处理程序,并将点击处理程序更改为焦点以避免多个 remove
正如@dheerosaur 指出的那样,重复点击输入按钮。
所以
$('#n')
.focus(function() {
$(this).parent().append('<a href="javascript:void()"> delete</a>');
$(this).next().click(function() {
alert('clicked'); //this not working
});
})
.blur(function() {
var _this = this;
setTimeout(function(){$(_this).next().remove();},100);
});
不过,您所经历的并不是问题。这是正常行为,因为该元素需要在另一个元素获得焦点之前失去焦点(触发模糊)。
您还应该匹配标签 for
带有输入元素 ID 的属性。
关于javascript - jquery优先执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4451115/