Как я могу сохранить отзывы пользователей, относящиеся к любой части веб-страницы?

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

Я могу придумать 2 решения:

  1. Сохраните координаты X, Y. Пришлось исключить это, поскольку координаты X, Y поддерживаются не во всех браузерах.
  2. Используйте Jquery для привязки исчерпывающего списка сущностей html к событию dblClick следующим образом:

    $(document).ready(function() {
    $("p,label,input,textarea").bind("dblclick", function(e) {
        $("#feedback_form").show();
    });
    

    });

Итак, в приведенном выше примере при двойном щелчке по любому элементу p, label, input или textarea отображается форма обратной связи (Код для передачи идентификатора элемента, по которому выполняется двойной щелчок, не включен в мой пример для простоты).

Итак, 2 не идеален, но, похоже, он поможет при любой обратной связи по списку поддерживаемых HTML-сущностей.

Есть ли какое-нибудь более простое решение, которое я не замечаю?

Кроме того, если я выберу 2, будет ли двойной щелчок лучшим способом задействовать эту форму обратной связи, или вы порекомендуете какое-нибудь другое мероприятие?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
274
6

Ответы 6

вы должны иметь возможность написать / получить функцию проверки попадания, чтобы увидеть, какие элементы DOM находятся под курсором мыши при двойном щелчке, а затем связать текст комментариев / обратной связи с идентификатором выбранного элемента

это предполагает, что все ваши элементы DOM имеют уникальные идентификаторы

(и что ваши пользователи знают, что они могут это сделать!)

Я бы рекомендовал не комментировать место любой на сайте, а вместо этого разрешить комментировать определенные элементы. Например, если это блог, вы можете использовать каждый абзац как элемент, который можно комментировать. Если это репозиторий кода, тогда комментарии могут быть добавлены к отдельным строкам кода.

Посмотрите, как В Django Book комментируют абзацы..

Эта страница не работает в Opera. Может быть, лучшая ссылка будет: djangobook.com/about/comments

Rene Saarsoo 14.01.2009 10:41

Я надеюсь, что большая часть вашего макета использует теги <div> и <table>. Как предложил Стивен, имейте уникальный идентификатор, связанный с каждым из ваших блочных элементов или любыми другими элементами, которые являются неотъемлемой частью вашей веб-страницы (возможно, изображениями).

Имейте событие onclick, связанное с элементом блока / макета, чтобы открыть другое окно или всплывающее окно javascript, захватить идентификатор элемента и иметь форму во всплывающем окне, где пользователь может отправить свой отзыв.

Я бы также предложил onmouseover, даже связанный со всеми этими элементами, который отображает всплывающую подсказку, указывающую, что пользователь может оставить отзыв об этом виджете / элементе макета.

Двойной щелчок - это плохо, потому что в большинстве браузеров вы можете выбирать слова, дважды щелкая по ним.

Вместо этого на странице должны быть специальные места, по которым вы можете щелкнуть, чтобы оставить отзыв. См. Хороший пример в ответе Soviut.

Вы можете сделать что-то вроде этого:

Блоки, которые вы хотите прокомментировать, имеют класс commentable и идентификатор. Приведенный ниже сценарий представляет собой схему, которая работает для браузеров, совместимых с W3C, т.е. для этого потребуется использовать attachEvent и глобальный объект события. Распространение события не отменяется, поэтому комментируемые блоки внутри комментируемых блоков будут запускать событие один раз. Действие по умолчанию для события также не отменяется, поэтому текст, на который дважды щелкнули, все равно будет выделен - возможно, в вашем диалоговом окне может быть действие «щелкните escape, чтобы отменить»?

function CommentDialog() {
    //this is a fake CommentDialog object constructor
    this.display = function( id ) {
        alert( 'you want to comment on the block with id: '+id+', which is outlined in red' );
    } 
}



window.addEventListener( 'dblclick', function(e){ 
    var target = e.target;
    while( /commentable/.test( target.className ) == false ) {
        // if we've hit the body tag then bomb out
        if ( target == document.body ) {
            return;
        }
        target = target.parentNode;
    }
    target.style.border = '1px solid red';
    var cmt = new CommentDialog();
    cmt.display( target.id );
 }, false );

Мне нравится второе решение, но я бы прикрепил функцию не к некоторым объектам html, а к четко определенному div что-то вроде:

$(document).ready(function() {
    $("div .commentable").each().bind("dblclick", function(e) {
        $("#feedback_form").show();
});
});

Итак, вам просто нужно обернуть все элементы, которые вы хотите комментировать, в <div class = "commentable"> .. </div>.

В первом решении, если вам нужна обратная связь в каждом месте вашей страницы, а не только в определенных элементах, JQuery может вам помочь.

jQuery(document).ready(function(){
   $().click(function(e){
      alert(e.pageX +', '+ e.pageY);
   }); 
})

См. Документ JQuery для получения дополнительной информации.

Другие вопросы по теме