Javascript 为什么赢了';t单击事件在跨度上工作,但将在跨度上工作?
有人能想出一个原因,为什么单击事件会在Javascript 为什么赢了';t单击事件在跨度上工作,但将在跨度上工作?,javascript,html,Javascript,Html,有人能想出一个原因,为什么单击事件会在a标记上工作,而不是在span上工作?我正在制作一个富文本编辑器,有一个粗体按钮,当点击它时,应该会使文本粗体。它只在我使用锚元素时起作用。我试着使用一个跨度,但什么也没发生。html是我唯一要改变的东西,所以我认为这不是JavaScript问题 $(document).ready(function(){ //creates the toolbar~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a
标记上工作,而不是在span
上工作?我正在制作一个富文本编辑器,有一个粗体按钮,当点击它时,应该会使文本粗体。它只在我使用锚元素时起作用。我试着使用一个跨度,但什么也没发生。html是我唯一要改变的东西,所以我认为这不是JavaScript问题
$(document).ready(function(){
//creates the toolbar~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$('#rte').focus()
var tools = [];
tools.push('underline');
tools.push('italic');
tools.push('bold');
tools.push('justifyCenter');
tools.push('justifyLeft');
tools.push('justifyRight');
var simple_toolbar = function(){
//iterates through each tool and adds its functionality to the editor
$.each(tools, function(index,value){
$('#'+value).click(function(event){
document.execCommand( value, false, null);
$('#rte').focus();
return false;
});
//end of click function
});
//end of each iterator
};
//end of simple toolbar function
//invokes the simple toolbar.
simple_toolbar();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
});
//end of the DOM loader
我认为变量“value”在迭代完成时会被破坏。您可以创建一个全局函数来处理实际的单击句柄,并将此函数分配给迭代中的按钮 您可以获取全局函数中单击的按钮的ID,并将其作为execCommand方法中的参数进行解析
因此,这是一个范围问题,很清楚。尝试将跨度设置为
显示:内联块
这不是最好的解决方案,但我想使用跨度的唯一原因是,当您单击带有href=“#”
的锚定标记时,页面不会跳到顶部。我决定只使用锚定标记,但不是使用href=“#”
而是使用href=“#bold”
。显然,当您使用id选择器作为href属性时,页面将跳转到页面上该元素所在的位置。仍然不确定为什么它不能与其他元素一起工作。我试着摆脱迭代器,为每个按钮编写一个单独的单击事件,但它仍然只对锚定标记起作用。仍在尝试更深入地研究“onclick”事件,但现在有两件事:
1) onclick仅为“a”和“input”标记保留(用于验证);或
2) 事件处理程序上需要更复杂的方法。见W3C:
旁注:在确定了“a”之后,可以将样式表简化为“id”上的背景URL,并在控件上添加后代选择器:
#controls a {
display: block;
width: 30px;
height: 30px;
}
首先,使用Doctype:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
如果将mousedown事件附加到跨度(取消),则跨度也可以工作。不知道哪一个(如果有的话)规范定义了跨度和锚的不同行为,但它现在可以工作了。 看。更改了以下部分:
$('#'+value).click(function(event){
document.execCommand( value, false, null);
$('#rte').focus();
return false;
}).mousedown(function(e){
e.preventDefault();
});
如果将jQuery更新为v1.7.1,则可以使用.on()函数。这将允许您使用id将click方法绑定到span
$(document).ready(function(){
$("#yourContainer").on("click", "#yourSpanID", function(){
// The code to make everything bold
});
});
任何DOM元素都可以侦听“click”事件,事实上,您展示的代码正是在这种意义上工作的。如果您在调用document.execCommand之前使用了一条警报语句,您会发现,只要您单击任何按钮,而不仅仅是“粗体”按钮,就会出现警报。您使用span标记的方式是错误的;span标记用于为句子中的一个单词着色和设置样式 最好使用
标签;你必须结束它。像这样:
<html>
<body>
<ul>
<li><a href="put a link file here if you want">"put your text here"</a></li>
<li><a href="put a link file here if you want">"put your text here"</a></li>
<li><a href="put a link file here if you want">"put your text here"</a></li>
</ul>
</body>
</html>
同时检查你的层次结构,从长远来看,这将对你有所帮助。希望我能帮上忙。您应该使用或而不是单击事件
这会将单击事件绑定到所有元素,即使它们是动态创建的。您能显示代码吗?您是否尝试过在跨度上浮动或设置display:block以查看这是否会产生影响?如果span为空,这可能是一个解决方案。span元素可以绑定到所有公共事件处理程序,因此可能是JavaScript问题。你能公开一些代码吗?跨度是否设置了宽度和高度,是否有类似内联块的显示?是的。跨度具有宽度、高度和倾斜块。在铬合金上,锚定标记不会使选择丢失,而跨度标记会丢失选择。我不知道为什么。顺便说一句,当您在调用
execCommand
之前集中精力时,证明确实有效:。我认为这可能也是问题所在,所以我放弃了花哨的迭代器,尝试为每个按钮编写一个简单的旧单击事件。它仍然只适用于锚点。您可以将锚点与href=“javascript:void(0)”一起使用,并且不会发生跳转。您还可以从链接的单击处理程序返回false以避免跳转,尽管听起来正常命名的锚点是可以的。Moin的评论也有效。如果它解决了你的问题,你应该将这个或其他人的答案标记为被接受的答案。这是✓代码>(勾选)符号。第1点可能不正确。您链接的页面以
为例。任何DOM元素都可以侦听单击事件。在没有看到更多代码的情况下很难回答这个问题。我还没有看到关于这个问题的API文档。为什么要使用“on”方法而不是“bind”方法?“on”方法听起来有点多余。你能告诉我为什么建议使用不同的doctype吗?HTML5 doctype已经足够严格了。除了doctype严格之外,还有其他原因吗?
$('#'+value).click(function(event){
document.execCommand( value, false, null);
$('#rte').focus();
return false;
}).mousedown(function(e){
e.preventDefault();
});
$(document).ready(function(){
$("#yourContainer").on("click", "#yourSpanID", function(){
// The code to make everything bold
});
});
<html>
<body>
<ul>
<li><a href="put a link file here if you want">"put your text here"</a></li>
<li><a href="put a link file here if you want">"put your text here"</a></li>
<li><a href="put a link file here if you want">"put your text here"</a></li>
</ul>
</body>
</html>
html{ }
body{ }
ul{ }
ul li{ float:left; this will define how the tags are displayed }
ul li a{ "from here down define how links act." }
ul li a:visited{ color:put a color here like light blue or something;}
ul li a:hover{ color:same with this; }
ul li a:active{color:same with this; }