Javascript 如何存储与网页任何部分相关的用户反馈?
我希望用户能够双击屏幕上的任何地方,以显示一个表单,允许提交有关该点的反馈 我可以想出两种解决方案:Javascript 如何存储与网页任何部分相关的用户反馈?,javascript,jquery,feedback,Javascript,Jquery,Feedback,我希望用户能够双击屏幕上的任何地方,以显示一个表单,允许提交有关该点的反馈 我可以想出两种解决方案: 存储X,Y坐标。必须排除这种情况,因为并非所有浏览器都支持X、Y坐标 使用Jquery将html实体的详尽列表绑定到dblClick事件,如下所示: $(document).ready(function() { $("p,label,input,textarea").bind("dblclick", function(e) { $("#feedback_form").show(); })
$(document).ready(function() {
$("p,label,input,textarea").bind("dblclick", function(e) {
$("#feedback_form").show();
});
}))另外,如果我选择2,双击是使用此反馈表单的最佳方法,还是您会推荐其他事件?您应该能够编写/获取命中测试函数,以查看双击时鼠标光标下的DOM元素,然后将注释/反馈文本与所选元素的ID关联 这假设所有DOM元素都有唯一的ID
(而且你的用户知道他们可以做到这一点!)我建议不要对网站上的任何位置进行评论,而是允许对特定元素进行评论。例如,如果它是一个博客,你可以使用每个段落作为一个可以评论的元素。如果它是一个代码库,那么可以将注释添加到单独的代码行中
看看是怎么做的。我希望您的大部分版面都使用和标记。正如Steven所建议的,拥有与每个块元素或任何其他作为网页组成部分的元素(可能是图像)关联的唯一id 将onclick事件与block/layout元素关联,以打开另一个窗口或javascript弹出窗口,捕获元素id,并在弹出窗口上创建一个表单,用户可以在其中提交反馈
我还建议甚至与所有这些元素关联的onmouseover,它会显示一个工具提示,指示用户可以留下关于布局小部件/元素的反馈。双击是不好的,因为在大多数浏览器中,您可以通过双击来选择单词
取而代之的是,页面上应该有一些特殊的地方,你们可以点击这里给出反馈。请参阅Soviut的答案,以获得一个很好的示例。您可以这样做: 您希望对其进行评论的块具有“可评论”类和id。
下面的脚本是适用于W3C兼容浏览器的大纲,即需要使用attachEvent和全局事件对象。
不会取消事件的传播,因此可评论块中的可评论块将每次触发一次事件。
事件的默认操作也未取消,因此双击的文本仍将突出显示-也许您的对话框可能有“单击转义以取消”操作
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();
});
});
因此,您只需要将所有希望在中可注释的元素包装起来代码>
对于第一种解决方案,如果您希望在页面的每个位置都有反馈,而不仅仅是指定的元素,JQuery可以帮助您
jQuery(document).ready(function(){
$().click(function(e){
alert(e.pageX +', '+ e.pageY);
});
})
有关更多信息,请参阅。此页面在Opera中似乎不起作用。也许更好的链接是: