Javascript Event事件-总结
一、事件类型
例如:mouseover鼠标移动到、keydown键盘按下
二、事件目标
是发生的事件或与之相关的对象,window、document和Element对象是最常见的事件目标
三、事件对象
是与特定事件相关且包含有关该事件详细信息的对象
用来指定事件类型的属性type
用来指定事件目标的属性target
四、事件类型
鼠标事件
- ‘mousedown’ – 鼠标设备按下一个元素的时候触发mousedown事件。
- ‘mouseup’ – 鼠标设备从按下的元素上弹起的时候触发mouseup事件。
- ‘click’ – 鼠标点击元素的时候触发click事件。
- ‘dblclick’ – 鼠标双击元素的时候触发dblclick事件。
- ‘mousemover’ – 鼠标移动到某元素上的时候触发mousemove事件。
- ‘mouseout’ – 鼠标从某元素离开的时候触发mouseout事件。
- ‘mousemove’ – 鼠标在某元素上移动但未离开的时候触发mousemove事件。
- mousewheel:当使用滚轮时触发
- contextmenu:显示菜单时会触发些事件
- detail:对于click事件来讲他指定了是单击还是双击还是三击
- altKey、ctrlKey、metakey和shiftKey:组合键当键盘按下这几个按钮时返回 true
键盘事件
- ‘keypress’ – 按键按下的时候触发该事件。
- ‘keydown’ – 按键按下的时候触发该事件,并且在keypress事件之前。
- ‘keyup’ – 按键松开的时候触发该事件,在keydown和keypress事件之后。
表单事件
- ‘select’ – 文本字段(input, textarea等)的文本被选择的时候触发该事件。
- ‘change’ – 控件失去input焦点的时候触发该事件(或者值被改变的时候)。
- ‘submit’ – 表单提交的时候触发该事件。
- ‘reset’ – 表单重置的时候触发该事件。
- ‘focus’ – 元素获得焦点的时候触发该事件,通常来自鼠标设备或Tab导航。
- ‘blur’ – 元素失去焦点的时候触发该事件,通常来自鼠标设备或Tab导航。
window事件
- ‘load’ – 页面加载完毕(包括内容、图片、frame、object)的时候触发该事件。
- ‘resize’ – 页面大小改变的时候触发该事件(例如浏览器缩放)。
- ‘scroll’ – 页面滚动的时候触发该事件。
- ‘unload’ – 从页面或frame删除所有内容的时候触发该事件(例如离开一个页面)。
五、注册事件处理程序
addEventListener():标准模式下,ie8之前
attachEvent():ie8之前
移事件事侦听
removeEventListener()
removeattchEvent();
六、事件处理程序
一旦注册了事件处理,浏览器会在指定对象上发生指定类型事件时自动调用它。
通常调用事件处理程序时事件对象作为一个参数,
function handler(event){
event = event || window.event;
}
七、取消默认事件
preventDefault():阻止默认事件
1、eturn false 与 event.preventDefault()的区别:
event.stopPropagation(); // 事件停止冒泡到,即不让事件再向上传递到document,但是此事件的默认行为仍然被执行,如点击一个链接,调用了
event.stopPropagation(),链接仍然会被打开。
event.preventDefault(); // 取消了事件的默认行为,如点击一个链接,链接不会被打开,但是此事件仍然会传递给更上一层的先辈元素。
在事件处理函数中使用 return false; 相当于同时调用了event.stopPropagation()和event.preventDefault(),事件的默认行为不会被执行,事件也不会冒泡向上传递。
八、阻止冒泡事件
if(event.stopPropagation){
event.StopPropagation(); // 非ie
}
else{
event.cancelBubble = true; // ie
}
九、文档加载事件
当文档加载解析完毕且所有延迟脚本 都执行完毕时会触发DOMContentLoaded事件,此时图片和异步脚本可能依旧在加载
1、事件DOMContentLoaded与load的区别:
先看这两句代码:
window.addEventListener(‘load’, loaded, false);
document.addEventListener(‘DOMContentLoaded’, loaded, false);
问题回顾:
这问题可把我郁闷死了,网上找的一个demo里头,他把样式直接用style内联(这种引进方式是dom方式)进来,然后用DOMContentLoaded来处理js,本来是没问题的。
但是当你把内联的样式写在一个外联的样式文件里头然后再进来的时候,问题就出现了。
什么原因?
DOMContentLoaded在外联样式加载前(dom加载完后)就触发了,外联的样式还没来得及渲染dom,这样导致DOMContentLoaded捕获的状态是外联样式渲染前的状态。
改变窗口大小可以重新触发样式的渲染,所以会形成一个假象:
页面进来的时候某个被样式定义过高度的元素的offsetHeight在你改变一下窗口(或者别的可以引起reflow的操作)时,js获取的这个offsetHeight居然不一样的,而在我们看来页面进来时跟窗口改变后,元素本身就没发生高度变化。
总结:
load事件是在页面所有元素都加载完后触发;
DOMContentLoaded,它是指dom tree加载完就触发。这个事件要小心使用,当然它是个强大的事件,起码用上它在某一层面上防止了页面加载被堵塞。
十、MouseEvent
button:0表示左健、1表示中间键、2表示右键
chientX、chilentY:表示鼠标指针相对于客户区或浏览器窗口的X坐标和Y坐标
screenX、screenY:鼠标指针相对于用户显示器的左上角X坐标和Y坐标
十一、IE Event
type:返回发生事件的类型
srcElement:发生事件的文档元素。与DOM Event对象的target兼容
勿重复检测浏览器
// 事件侦听方式1 function addEvent(el, type, fn){ if(el.addEventListener){ el.addEventListener(type, fn, false); }else{ el.attachEvent('on'+type, fn) } } // 事件侦听方式2 var addEvent = document.addEventListener ? function(el, type, fn) {el.addEventListener(type, fn, false);} : function(el, type, fn) {el.attachEvent('on'+type, fn)};
// 此方式与以上的方式来侦听方式相同,此代码不兼容ie6
var obj = document.getElementById("ss");
obj.onclick = function(){
alert("aa");
}
1、捕捉按键的兼容代码:
1
2
3
4
5
6
7
8
9
|
document.onkeydown=keydown; function keydown( event ) { if ( ! event ) event = window. event ; fasdf var keycode = event .KeyCode | event .Which; alert(keycode); } |
2、window.event只能在ie上执行
1 document.getElementById('btn1').onclick = function(event){
2 var e = event || window.event;
3 var target = e.srcElement || e.target; // 火狐只能用 event.target,IE只能用event.srcElement
4 alert(target.innerHTML);
5 }
$("#text").click(function(){
alert($(this).attr("aa")); // $(this)相当于event.srcElement || event.target;
})
二、获取中文的uncode编码 使用escape和unescape来进行编码
$(function(){ var str = '\u6e56\u5357' ; alert(unescape(str)); // 输出 湖南 var str = '湖南' ; alert(escape(str)); // 输出 \u6e56\u5357 }) |
三、事件绑定
事件绑定的3中常用方法:传统绑定、W3C绑定方法、IE绑定方法。但是,在实际开发中对于我们来讲重要的是需要一个通用的、跨浏览器的绑定方法。如果我们在互联网上搜索一下会发现许多方法,一下是比较知名的几种方法:
创建侦听:
1 // 公用脚本 绑定事件-判断浏览器兼容
2 function addEvent(obj,evtType,func,cap){
3 cap = cap || false;
4 if(obj.addEventListener){ // w3c标准兼容
5 obj.addEventListener(evtType,func,cap);
6 return true;
7 }
8 else if(obj.attachEvent){ // IE兼容
9 if(cap){
10 obj.setCapture();
11 return true;
12 }
13 else{
14 return obj.attachEvent("on" + evtType,func);
15 }
16 }
17 else{ // 其它浏览器
18 return false;
19 }
20 }
21
22 addEvent(window, "resize", AdMoveConfig.Resize);
23 addEvent(window, "scroll", AdMoveConfig.Scroll);
解除侦听:
1 function removeEventHandler(target, type, func) {
2 if (target.removeEventListener)
3 target.removeEventListener(type, func, false);
4 else if (target.detachEvent)
5 target.detachEvent("on" + type, func);
6 else delete target["on" + type];
7 }
1 removeEventHandler(Button1, "click", test);
完整代码:
四、键盘事件
1、首先需要知道的是:
1、keydown()
keydown事件会在键盘按下时触发.
2、keyup()
keyup事件会在按键释放时触发,也就是你按下键盘起来后的事件
3、keypress()
keypress事件会在敲击按键时触发,我们可以理解为按下并抬起同一个按键
2、获得键盘上对应的ascII码:
1
2
3
|
$(document).keydown(function( event ){ alert( event .keyCode); }); |
3、实例(当按下键盘上的左右方面键时)
<div style= "width:30px; height: 30px; border: 1px #ccc solid; left: 0px; top:0px; position: absolute;" id= "bl" ></div> <div id= "test" ></div> $(function(){ $(document).keydown(function( event ){ var slef = $( '#bl' ); var _l = slef.css( 'left' ); $( '#test' ).html(_l); //判断当event.keyCode 为37时(即左方面键),执行函数to_left(); //判断当event.keyCode 为39时(即右方面键),执行函数to_right(); if ( event .keyCode == 37){ slef.css( 'left' , parseInt(_l)-5+ 'px' ); } if ( event .keyCode == 39){ slef.css( 'left' , parseInt(_l)+5+ 'px' ); } }) }) |
4、组合键
<div style= "width:30px; height: 30px; border: 1px #ccc solid; left: 0px; top:0px; position: absolute;" id= "bl" ></div> <div id= "test" ></div> <script type= "text/javascript" > $(function(){ $(document).keydown(function( event ){ // alert(event.keyCode); // 输入键盘码 var slef = $( '#bl' ); var _l = slef.css( 'left' ); $( '#test' ).html(_l); if ( event .ctrlKey && event .keyCode == 73){ // 组合键ctrl+i slef.css( 'left' , parseInt(_l)-5+ 'px' ); } if ( event .keyCode == 39){ slef.css( 'left' , parseInt(_l)+5+ 'px' ); } }) }) </script> |
5、侦听ctrl键
$(function(){ $(document).keydown(function( event ){ if ( event .ctrlKey){ //(ctrlKey和metaKey等效:都是监测)按下ctrl返回turn,按下非ctrl键返回false; $( '#test' ).html( '已按下' ); } }) }) |
6、键盘系列操作
$(function(){ $(document).keydown(function ( event ) { //$('#test').html(event.keyCode); // 输入键盘码 /* var e = event || window.event; var k = e.keyCode || e.which; */ var e = event || window. event ; // 获取window.event ie兼容 var k = e.keyCode || e.which; // 获取按键码 switch (k) { case 69: $( '#test' ).html( 'e' ); break ; case 81: $( '#test' ).html( 'q' ); break ; case 82: $( '#test' ).html( 'r' ); break ; case 87: $( '#test' ).html( 'w' ); break ; default : $( '#test' ).html( '不对' ); break ; } }) }); |
五、JS中判断鼠标按键
IE
左键是 window.event.button = 1
右键是 window.event.button = 2
中键是 window.event.button = 4
没有按键动作window.event.button = 0
Firefox
左键是 event.button = 0
右键是 event.button = 2
中键是 event.button = 1
没有按键动作 event.button = 0
Opera 7.23/7.54
鼠标左键是 window.event.button = 1
没有按键动作 window.event.button = 1
右键和中键无法获取
Opera 7.60/8.0
鼠标左键是 window.event.button = 0
没有按键动作 window.event.button = 0
右键和中键无法获取
另外:屏蔽右键的是window.event.button = 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$(function () { $(document).mousedown(function( event ){ // var e = event || window.event; switch ( event .button){ case 1: $( '#test' ).html( '中键按下' ); break ; case 2: $( '#test' ).html( '右键按下' ); break ; case 3: $( '#test' ).html( '左右键同时按下' ); break ; default : $( '#test' ).html( '没有键按下' ); break ; } $( '#test1' ).html(e.button); }) }) |
四、Event属性:
altKey, button, cancelBubble, clientX, clientY, ctrlKey, fromElement, keyCode, offsetX, offsetY, propertyName, returnValue, screenX,
screenY, shiftKey, srcElement, srcFilter, toElement, type, x, y
1.altKey
描述:
检查alt键的状态。
语法:
event.altKey
可能的值:
当alt键按下时,值为 TRUE ,否则为 FALSE 。只读。
2.button
描述:
检查按下的鼠标键。
语法:
event.button
可能的值:
0 没按键
1 按左键
2 按右键
3 按左右键
4 按中间键
5 按左键和中间键
6 按右键和中间键
7 按所有的键
这个属性仅用于onmousedown, onmouseup, 和 onmousemove 事件。对其他事件,不管鼠标状态如何,都返回 0(比如onclick)。
3.cancelBubble
描述:
检测是否接受上层元素的事件的控制。
语法:
event.cancelBubble[ = cancelBubble]
可能的值:
这是一个可读写的布尔值:
TRUE 不被上层原素的事件控制。
FALSE 允许被上层元素的事件控制。这是默认值。
例子:
下面的代码片断演示了当在图片上点击(onclick)时,如果同时shift键也被按下,就取消上层元素(body)上的事件onclick所引发的showSrc()函数。
<SCRIPT LANGUAGE="JScript">
function checkCancel() ...{
if (window.event.shiftKey)
window.event.cancelBubble = true;
}
function showSrc() ...{
if (window.event.srcElement.tagName == "IMG")
alert(window.event.srcElement.src);
}
</SCRIPT>
<BODY onclick="showSrc()">
<IMG onclick="checkCancel()" src="/sample.gif">
4.clientX
描述: 返回鼠标在窗口客户区域中的X坐标。
语法: event.clientX
注释: 这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。
5.clientY
描述: 返回鼠标在窗口客户区域中的Y坐标。
语法: event.clientY
注释: 这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。
6.ctrlKey
描述: 检查ctrl键的状态。
语法: event.ctrlKey
可能的值: 按ctrl键按下时,值为 TRUE ,否则为 FALSE 。只读。
7.fromElement
描述: 检测 onmouseover 和 onmouseout 事件发生时,鼠标所离开的元素。 参考:18.toElement
语法: event.fromElement
注释: 这是个只读属性。
8.keyCode
描述: 检测键盘事件相对应的内码。
这个属性用于 onkeydown, onkeyup, 和 onkeypress 事件。
语法: event.keyCode[ = keyCode]
可能的值: 这是个可读写的值,可以是任何一个Unicode键盘内码。如果没有引发键盘事件,则该值为 0 。
9.offsetX
描述: 检查相对于触发事件的对象,鼠标位置的水平坐标
语法: event.offsetX
10.offsetY
描述: 检查相对于触发事件的对象,鼠标位置的垂直坐标
语法: event.offsetY
11.propertyName
描述: 设置或返回元素的变化了的属性的名称。
语法: event.propertyName [ = sProperty ]
可能的值:
sProperty 是一个字符串,指定或返回触发事件的元素在事件中变化了的属性的名称。
这个属性是可读写的。无默认值。
注释:
你可以通过使用 onpropertychange 事件,得到 propertyName 的值。
例子:
下面的例子通过使用 onpropertychange 事件,弹出一个对话框,显示 propertyName 的值。
<HEAD>
<SCRIPT>...
function changeProp()...{
btnProp.value = "This is the new VALUE";
}
function changeCSSProp()...{
btnStyleProp.style.backgroundColor = "aqua";
}
</SCRIPT>
</HEAD>
<BODY>
<P>The event object property propertyName is
used here to return which property has been
altered.</P>
<INPUT TYPE=button ID=btnProp onclick="changeProp()"
VALUE="Click to change the VALUE property of this button"
onpropertychange='alert(event.propertyName+" property has changed value")'>
<INPUT TYPE=button ID=btnStyleProp
onclick="changeCSSProp()"
VALUE="Click to change the CSS backgroundColor property of this button"
onpropertychange='alert(event.propertyName+" property has changed value")'>
</BODY>
12.returnValue
描述: 设置或检查从事件中返回的值
语法: event.returnValue[ = Boolean]
可能的值:
true 事件中的值被返回
false 源对象上事件的默认操作被取消
例子见本文的开头。
13.screenX
描述: 检测鼠标相对于用户屏幕的水平位置
语法: event.screenX
注释: 这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。
14.screenY
描述: 检测鼠标相对于用户屏幕的垂直位置
语法: event.screenY
注释: 这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。
15.shiftKey
描述: 检查shift键的状态。
语法: event.shiftKey
可能的值: 按shift键按下时,值为 TRUE ,否则为 FALSE 。只读。
16.srcElement
描述: 返回触发事件的元素。只读。例子见本文开头。
语法: event.srcElement
17.srcFilter
描述: 返回触发 onfilterchange 事件的滤镜。只读。
语法: event.srcFilter
18.toElement
描述: 检测 onmouseover 和 onmouseout 事件发生时,鼠标所进入的元素。 参考:7.fromElement
语法: event.toElement
注释: 这是个只读属性。
例子:下面的代码演示了当鼠标移到按钮上时,弹出一个对话框,显示“mouse arrived”
<SCRIPT>
function testMouse(oObject) ...{
if(oObject.contains(event.toElement)) ...{
alert("mouse arrived");
}
}
</SCRIPT>
<BUTTON ID=oButton onmouseover="testMouse(this)">Mouse Over This.</BUTTON>
19.type
描述: 返回事件名。
语法: event.type
注释: 返回没有“on”作为前缀的事件名,比如,onclick事件返回的type是click
只读。
20. x
描述: 返回鼠标相对于css属性中有position属性的上级元素的x轴坐标。如果没有css属性中有position属性的上级元素,默认以BODY元素作为参考对象。
语法: event.x
注释:
如果事件触发后,鼠标移出窗口外,则返回的值为 -1
这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。
21. y
描述: 返回鼠标相对于css属性中有position属性的上级元素的y轴坐标。如果没有css属性中有position属性的上级元素,默认以BODY元素作为参考对象。
语法: event.y
注释:
如果事件触发后,鼠标移出窗口外,则返回的值为 -1
这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。
javascript事件列表解说 |
|||
事件 | 浏览器支持 | 解说 | |
一般事件 | onclick | IE3、N2 | 鼠标点击时触发此事件 |
ondblclick | IE4、N4 | 鼠标双击时触发此事件 | |
onmousedown | IE4、N4 | 按下鼠标时触发此事件 | |
onmouseup | IE4、N4 | 鼠标按下后松开鼠标时触发此事件 | |
onmouseover | IE3、N2 | 当鼠标移动到某对象范围的上方时触发此事件 | |
onmousemove | IE4、N4 | 鼠标移动时触发此事件 | |
onmouseout | IE4、N3 | 当鼠标离开某对象范围时触发此事件 | |
onkeypress | IE4、N4 | 当键盘上的某个键被按下并且释放时触发此事件. | |
onkeydown | IE4、N4 | 当键盘上某个按键被按下时触发此事件 | |
onkeyup | IE4、N4 | 当键盘上某个按键被按放开时触发此事件 | |
页面相关事件 | onabort | IE4、N3 | 图片在下载时被用户中断 |
onbeforeunload | IE4、N | 当前页面的内容将要被改变时触发此事件 | |
onerror | IE4、N3 | 出现错误时触发此事件 | |
onload | IE3、N2 | 页面内容完成时触发此事件 | |
onmove | IE、N4 | 浏览器的窗口被移动时触发此事件 | |
onresize | IE4、N4 | 当浏览器的窗口大小被改变时触发此事件 | |
onscroll | IE4、N | 浏览器的滚动条位置发生变化时触发此事件 | |
onstop | IE5、N | 浏览器的停止按钮被按下时触发此事件或者正在下载的文件被中断 | |
onunload | IE3、N2 | 当前页面将被改变时触发此事件 | |
表单相关事件 | onblur | IE3、N2 | 当前元素失去焦点时触发此事件 |
onchange | IE3、N2 | 当前元素失去焦点并且元素的内容发生改变而触发此事件 | |
onfocus | IE3 、N2 | 当某个元素获得焦点时触发此事件 | |
onreset | IE4 、N3 | 当表单中RESET的属性被激发时触发此事件 | |
onsubmit | IE3 、N2 | 一个表单被递交时触发此事件 | |
滚动字幕事件 | onbounce | IE4、N | 在Marquee内的内容移动至Marquee显示范围之外时触发此事件 |
onfinish | IE4、N | 当Marquee元素完成需要显示的内容后触发此事件 | |
onstart | IE4、 N | 当Marquee元素开始显示内容时触发此事件 | |
编辑事件 | onbeforecopy | IE5、N | 当页面当前的被选择内容将要复制到浏览者系统的剪贴板前触发此事件 |
onbeforecut | IE5、 N | 当页面中的一部分或者全部的内容将被移离当前页面[剪贴]并移动到浏览者的系统剪贴板时触发此事件 | |
onbeforeeditfocus | IE5、N | 当前元素将要进入编辑状态 | |
onbeforepaste | IE5、 N | 内容将要从浏览者的系统剪贴板传送[粘贴]到页面中时触发此事件 | |
onbeforeupdate | IE5、 N | 当浏览者粘贴系统剪贴板中的内容时通知目标对象 | |
oncontextmenu | IE5、N | 当浏览者按下鼠标右键出现菜单时或者通过键盘的按键触发页面菜单时触发的事件 | |
oncopy | IE5、N | 当页面当前的被选择内容被复制后触发此事件 | |
oncut | IE5、N | 当页面当前的被选择内容被剪切时触发此事件 | |
ondrag | IE5、N | 当某个对象被拖动时触发此事件 [活动事件] | |
ondragdrop | IE、N4 | 一个外部对象被鼠标拖进当前窗口或者帧 | |
ondragend | IE5、N | 当鼠标拖动结束时触发此事件,即鼠标的按钮被释放了 | |
ondragenter | IE5、N | 当对象被鼠标拖动的对象进入其容器范围内时触发此事件 | |
ondragleave | IE5、N | 当对象被鼠标拖动的对象离开其容器范围内时触发此事件 | |
ondragover | IE5、N | 当某被拖动的对象在另一对象容器范围内拖动时触发此事件 | |
ondragstart | IE4、N | 当某对象将被拖动时触发此事件 | |
ondrop | IE5、N | 在一个拖动过程中,释放鼠标键时触发此事件 | |
onlosecapture | IE5、N | 当元素失去鼠标移动所形成的选择焦点时触发此事件 | |
onpaste | IE5、N | 当内容被粘贴时触发此事件 | |
onselect | IE4、N | 当文本内容被选择时的事件 | |
onselectstart | IE4、N | 当文本内容选择将开始发生时触发的事件 | |
数据绑定 | onafterupdate | IE4、N | 当数据完成由数据源到对象的传送时触发此事件 |
oncellchange | IE5、N | 当数据来源发生变化时 | |
ondataavailable | IE4、N | 当数据接收完成时触发事件 | |
ondatasetchanged | IE4、N | 数据在数据源发生变化时触发的事件 | |
ondatasetcomplete | IE4、N | 当来子数据源的全部有效数据读取完毕时触发此事件 | |
onerrorupdate | IE4、N | 当使用onBeforeUpdate事件触发取消了数据传送时,代替onAfterUpdate事件 | |
onrowenter | IE5、N | 当前数据源的数据发生变化并且有新的有效数据时触发的事件 | |
onrowexit | IE5、N | 当前数据源的数据将要发生变化时触发的事件 | |
onrowsdelete | IE5、N | 当前数据记录将被删除时触发此事件 | |
onrowsinserted | IE5、N | 当前数据源将要插入新数据记录时触发此事件 | |
外部事件 | onafterprint | IE5、N | 当文档被打印后触发此事件 |
onbeforeprint | IE5、N | 当文档即将打印时触发此事件 | |
onfilterchange | IE4、N | 当某个对象的滤镜效果发生变化时触发的事件 | |
onhelp | IE4、N | 当浏览者按下F1或者浏览器的帮助选择时触发此事件 | |
onpropertychange | IE5、N | 当对象的属性之一发生变化时触发此事件 | |
onreadystatechange | IE4、N | 当对象的初始化属性值发生变化时触发此事件 |
posted on 2016-03-18 22:16 ilinux_one 阅读(3570) 评论(0) 编辑 收藏 举报