События DOM и целевой элемент - PullRequest
0 голосов
/ 23 октября 2009

вот и моя проблема. Я регистрирую событие dblclick для некоторых тегов p, когда пользователь дважды щелкает этот тег и может редактировать содержимое. Пока все хорошо, единственная проблема, если тег p содержит другие теги и пользователь нажимает на него, только содержимое этого тега является редактируемым.

, чтобы уточнить немного, вот пример

<html>
    <head>
        <title>Test Event</title>
        <script src="http://www.google.com/jsapi"></script>
        <script>
            google.load("jquery", "1.3");
            google.setOnLoadCallback(function() {
                $(function(){
                    $('#catchme').bind('dblclick', function(e){
                        alert(e.target.innerHTML);
                    });
                });
            });

        </script>
        <style>
            .bk_yellow {
                background-color: yellow;
            }
        </style>
    </head>
    <body>
        <p id="catchme">Lorem ipsum dolor sit amet, <span class="bk_yellow">consectetur adipiscing elit. Phasellus</span> tempor nisl a velit commodo pellentesque. Pellentesque vitae posuere quam. Ut vitae justo nec quam bibendum placerat eu et diam. Morbi nec tellus sit amet libero lacinia vestibulum. Donec vulputate libero eget enim rhoncus dapibus. Sed mattis lobortis est sit amet facilisis. Proin porta lobortis commodo. Sed quis erat a elit malesuada tincidunt at in dui. Nunc sit amet pellentesque odio. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus dictum justo sed enim pharetra sollicitudin. Cras at tortor ante, at interdum nisi. Proin pulvinar sodales imperdiet. Aliquam mi ipsum, suscipit tincidunt lobortis eget, venenatis nec lorem. Sed euismod enim volutpat nisi vulputate iaculis. </p>
    </body>
</html>

Если вы нажмете на не желтый текст, то все в порядке, если вы нажмете на желтый, будет сброшено только содержимое диапазона. Есть ли способ заставить dom действительно ссылаться на элемент, событие которого было зарегистрировано?

Я использую эту технику в нашей CMS для домашнего браузера, и эта ошибка немного раздражает.

Полагаю, если бы не было способа избежать такого поведения, мне пришлось бы каким-то образом прикрепить элемент к событиям.

PS: в примере используется jquery, но в реальной CMS используется ExtJS, поэтому любой ответ, специфичный для jquery, не будет в порядке.

Ответы [ 2 ]

3 голосов
/ 23 октября 2009

Вы хотите e.currentTarget, а не e.target. Объяснение различий ; и да, названия довольно запутанные.

1 голос
/ 23 октября 2009

Я думаю, что вы можете использовать firebug и посмотреть, что переменная (e) имеет в качестве свойств.

В jQuery это работает: alert(e.currentTarget.innerHTML);

Вместо e.target.innerHTML.

Итак, проблема в том, что вы используете неправильное свойство, но я раньше не использовал ExtJS, поэтому не могу дать никаких указаний.

Если вам нужно сделать это вручную, чтобы преобразовать событие в цель, вот что я использую для этого:

targetFromEvent = function(e) {
        var targ;
        if (!e) {
            e = window.event;
        }
        if (e.target) {
            targ = e.target;
        } else if (e.srcElement) {
            targ = e.srcElement;
        }
        if (targ.nodeType == 3) { // defeat Safari bug
            targ = targ.parentNode;
        }
        return targ;
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...