当我点击菜单li选项时,我失去了对contentEditable的关注,所以当我尝试execCommand时,选择不再存在且不影响选择。如何在不添加输入的情况下解决此问题?
HTML
<div contenteditable=true>
paragraph1<br/>
paragraph2<br/>
paragraph3
</div>
<div contenteditable=true>
paragraph4<br/>
paragraph5<br/>
paragraph6
</div>
<input type=button id=show value=ToggleMenu>
<ul id=submenu>
<li>p</li>
<li>h1</li>
<li>h2</li>
</ul>
的Javascript
$("#show").on("click",function(){
$("#submenu").toggle();
});
$("#submenu").on("click","li",function(){ //when this is clicked, editable div loses focus.
document.execCommand("formatBlock", false, $(this).text());
console.log($(this).text(), "was clicked");
});
答案 0 :(得分:1)
您可以执行以下操作:
mousedown
代替click
<li>
内容document.execCommand()
演示:http://jsfiddle.net/timdown/SNTyY/13/
代码:
var $submenu = $("#submenu");
$("#show").on("click",function(){
$submenu.toggle();
});
$submenu.mousedown("li",function(e){
var li = e.target;
e.preventDefault();
document.execCommand("formatBlock", false, $(li).text());
});
$submenu.click(function(e) {
e.preventDefault();
});
答案 1 :(得分:0)
您的代码存在的一个问题是它不符合HTML标准。例如,子菜单应为
<ul id = 'submenu'>
<li>p</li>
<li>h1</li>
<li>h2</li>
</ul>
不要使用li
作为点击事件的选择器,请尝试
$("#submenu").on("click", "li", function(){
document.execCommand("formatBlock", false, $(this).text());
alert($(this).text());
});
这会在点击事件上抛出警告框,因此您知道点击正在注册。