列表项上的Onclick事件

时间:2013-12-21 22:36:23

标签: javascript jquery html css

我正在尝试关注this answer,但不是像他在jsfiddle中那样使用按钮,而是尝试使用列表项:

http://jsfiddle.net/hqvDT/108/

它看起来应该可以正常工作,但是当我尝试选择一些文本然后按B(粗体)时,它实际上并不会加粗文本。

怎么了?

HTML:

<div id="myarea" contenteditable="true"></div>

<ul>
    <li onclick="MakeBold();">B</li>
    <li><i>I</i></li>
</ul>

CSS:

#myarea {
   border:1px solid #000;
   padding:5px; 
   height:150px;
   width:400px;
   overflow:scroll; 
}

ul {
    list-style: none;
}

ul li {
    width: 35px;
    height: 35px;
    border: 1px solid #ccc;
    text-align: center;
    line-height: 32px;
    font-size: 14px;
    color: #999;
    cursor: pointer;
    display: inline-block;
    margin-right: -5px;
    font-weight: bold;
    font-size: 18px;
}

ul li:hover {
    color: black;
}

JS:

function MakeBold() {
    document.execCommand('bold', null, false);
}

3 个答案:

答案 0 :(得分:3)

问题在于,当单击按钮以外的元素时,textarea中的选择将消失。

解决此问题的方法是使用onmousedown而不是onclick,因为mousedown事件在文本选择丢失之前被触发。

<li onmousedown="MakeBold()">B</li>

答案 1 :(得分:0)

单击按钮不会取消选择文本。单击时的其他元素将取消选择文本。由于在单击触发之前取消选择文本,因此文本不会变为粗体。每次选择文本时,您都需要使用按钮或记住所选文本,并处理保存的选择。我真的建议坚持使用按钮。

答案 2 :(得分:0)

按下鼠标并阻止默认设置。

HTML:

<div id="myarea" contenteditable="true"></div>
    <ul>
        <li id="bolded">B</li>
        <li id="italiced"><i>I</i></li>
    </ul>

JS:

document.getElementById("bolded").addEventListener("mousedown", function(event){
  event.preventDefault()
  document.execCommand('bold', false, null)
})

document.getElementById("italiced").addEventListener("mousedown", function(event){
  event.preventDefault()
  document.execCommand('italic', false, null)
})