我有以下jQuery函数:
1)提交表格
$(".content").delegate('.entryButton','click', function() {
var form = $(this).closest("form");
var id = form.attr('id');
var text = form.find("textarea").val();
Sijax.request('add_entry', [id, text]);
//Prevent the form from being submitted (default HTML)
return false;
});
2)放大表格并显示输入按钮
$("textarea").focus(function() {
$(this).css('height', '80px');
var button = $(this).parent().next().children();
button.css('visibility', 'visible');
button.css('height', '20px')
});
3)使textarea变小并隐藏按钮
$("textarea").blur(function() {
$(this).css('height', '30px');
var button = $(this).parent().next().children();
button.css('height', '0px')
});
当我尝试输入时会发生这种情况:
我认为这意味着模糊和点击事件相互干扰?
您可以找到问题的小提示here。当您按下按钮并使该字段聚焦时,它会使该字段模糊但不会输入该字段。当您按下按钮并且字段模糊时,条目就会被提交。
有什么想法吗?
提前致谢!
答案 0 :(得分:2)
您的问题是click
触发了mouseup
上的按钮,但是当您更改高度时,会导致mouseup
时鼠标不再位于按钮上发生。使用mousedown
代替click
,然后使用trigger('blur')
textarea
来发生这两件事。
注意:您仍然需要click
个活动才能return false
取消默认表单提交功能。
答案 1 :(得分:2)
$('.entryButton').on('click', function (e) {
return false; // to prevent default form post
});
$("form").delegate('.entryButton','mousedown', function() {
$('textarea').trigger('blur');
var form = $(this).closest("form");
var id = form.attr('id');
var text = form.find("textarea").val();
$("#test").append(text);
//Prevent the form from being submitted (default HTML)
return false;
});
并保持焦点和模糊功能。
thanks.
答案 2 :(得分:1)
此问题是blur
事件,其效果比click
事件更快。这就是为什么它使场变小而不是先提交表格。
您只需将第一行从click
更改为mousedown
:
$(".content").delegate('.entryButton','mousedown', function() {
// your code
});
或者:
$(".content").bind('mousedown', function() {
// your code
});
答案 3 :(得分:1)
我发现自己习惯使用http://api.jquery.com/unbind/
答案 4 :(得分:0)
看起来更改高度并强制重排取消了click事件。最简单的解决方案是使用mousedown
而不是点击(它在模糊之前触发)或将{css更改包装在setTimeout
中。