Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么赢了';t单击事件在跨度上工作,但将在跨度上工作?_Javascript_Html - Fatal编程技术网

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; }