为什么沉默这个关键事件不会阻止传播?

时间:2011-10-31 19:30:57

标签: javascript dom javascript-events

一个侦听器是输入,另一个是文档。输入监听器是keydown,即文档的按键。首先调用输入事件并使事件静音,但仍然会调用文档侦听器!为什么呢?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <title>Test Silence</title>
    </head>
    <body>
        <input type="text" id="test" name="test" />

        <script>
            var docListener = function(event)
            {
                var d = document.createElement( "div" );
                d.textContent = "documentListener";
                document.body.appendChild( d );
            }

            //Add key listener to document
            document.addEventListener( "keypress", docListener, true );

            var inputListener = function(event)
            {
                var d = document.createElement( "div" );
                d.textContent = "inputListener";
                document.body.appendChild( d );

                //Silence event
                event.preventDefault();
                event.stopPropagation();
            }

            //Add key listener to document
            document.getElementById( "test" ).addEventListener( "keydown", inputListener, true );
        </script>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

这是两个不同的事件。一个人不会干涉另一个人。如果你想停止keypress冒泡,你必须明确说出来:

document.getElementById( "test" ).addEventListener( "keypress", inputListener, true );