使用PageY和ClientY鼠标位置的差异结果
Difference results using PageY and ClientY mouse positions
我的问题类似于在鼠标位置打开JQuery Ui对话框,但不同之处在于我希望JQuery对话框显示非常接近被点击的按钮。我目前的问题是,当我设置position
属性时,使用
$("button.deleteEmailRow").live("click", function (e) {
var target = this
$("#emailAddress").html(this.name); // not imp for my problem
$("#dialog-email-confirm").dialog({
autoOpen: false,
width: 400,
modal: false,
resizable: false,
dialogClass: 'dialogs-only',
buttons: {
"Delete Email Recipient": function () {//snip;
return false;},
"Cancel": function () {//snip;
return false;
}
}
});
$("#dialog-email-confirm")
.dialog('option', 'position', [e.pageX+30, e.pageY])
.dialog('open');
});
但是,当使用下列代码时,它会按预期工作。
$("#dialog-email-confirm")
.dialog('option', 'position', [e.clientX+30, e.clientY])
.dialog('open');
根据Jquery网站,第一个脚本应该可以工作。
在跟踪鼠标移动时,通常需要知道实际的鼠标指针的位置。的事件对象处理程序包含一些关于鼠标坐标的信息。可以使用.clientX、.offsetX和.pageX等属性,但是对它们的支持因浏览器而异。幸运的是,jQuery规范.pageX和.pageY属性,以便可以使用它们在所有浏览器中。的X和Y坐标相对于文档左上角的鼠标指针,如如上面的输出示例所示。
我检查了一下,以确保使用以下值是相同的,并发现有一个关于y坐标的差异。
var pageCoords = "( " + e.pageX + ", " + e.pageY + " )";
var clientCoords = "( " + e.clientX + ", " + e.clientY + " )";
alert(pageCoords + ''n' + clientCoords);
我已经通读了QuirksMode,并且还使用了一些按照预期行为的测试代码。为什么上面在我的脚本中产生不同的结果?它与我的HTML结构有关吗?
编辑(更新后的HTML):
<html>
<head>
<meta name="generator" content="HTML Tidy for Windows (vers 14 February 2006), see www.w3.org">
<title></title>
<link href="/Content/Site.css" rel="stylesheet" type="text/css">
<link href="/Content/960.css" rel="stylesheet" type="text/css">
<link href="/Content/themes/liberty/jquery-ui.css" rel="stylesheet" type="text/css">
<link href="/Content/themes/dialogs-only/jquery-ui-1.8.14.custom.css" rel="stylesheet" type="text/css">
<link href="/Content/sexybuttons.css" rel="stylesheet" type="text/css">
<link href="/Scripts/messagebar/skins/plain/skin.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="page">
<div id="header" class="container_12"></div>
<div id="menuwrapper"></div>
<div id="content" class="container_12">
<div id="main" class="grid_12 alpha omega">
<h2>
Configuration Settings
</h2>
<form action="/Settings/Edit" method="post">
<fieldset>
<legend>Settings</legend> // snip
<div class="editor-label">
<label for="EmailSuccessList">List of recipients for Successful Notifications</label>
</div>
<div class="editor-field">
<fieldset>
<input type="hidden" name="EmailSuccessList.index" autocomplete="off" value="4eedd5a0-076b-4bc6-9a07-7455df9c5d83"><input type="hidden" name="EmailSuccessList.index" autocomplete="off" value="151d8ad0-f204-445c-8778-5207ddbae952"><input type="hidden" name="EmailSuccessList.index" autocomplete="off" value="7b51d4b0-78b6-4ccd-a886-ffef9fe8a00f"><input type="hidden" name="EmailSuccessList.index" autocomplete="off" value="0c7f4c5f-7344-4b47-9202-3ff61ce843fc">
<table id="editorEmailSuccessRows" class="editorEmailSuccessRows">
<tr class="editorRow">
<td class="emailRow">
<input class="text-box single-line" id="EmailSuccessList_4eedd5a0-076b-4bc6-9a07-7455df9c5d83_" name="EmailSuccessList[4eedd5a0-076b-4bc6-9a07-7455df9c5d83]" type="text" value="abcs@test.com">
</td>
<td>
<button type="button" href="#" id="deleteEmailRow" class="deleteEmailRow" name="abcs@test.com"><span><span><span class="delete">delete</span></span></span></button>
</td>
</tr>
<tr class="editorRow">
<td class="emailRow">
<input class="text-box single-line" id="EmailSuccessList_151d8ad0-f204-445c-8778-5207ddbae952_" name="EmailSuccessList[151d8ad0-f204-445c-8778-5207ddbae952]" type="text" value="abcs@test.com">
</td>
<td>
<button type="button" href="#" id="deleteEmailRow" class="deleteEmailRow" name="abcs@test.com"><span><span><span class="delete">delete</span></span></span></button>
</td>
</tr>
<tr class="editorRow">
<td class="emailRow">
<input class="text-box single-line" id="EmailSuccessList_7b51d4b0-78b6-4ccd-a886-ffef9fe8a00f_" name="EmailSuccessList[7b51d4b0-78b6-4ccd-a886-ffef9fe8a00f]" type="text" value="abcs@test.com">
</td>
<td>
<button type="button" href="#" id="deleteEmailRow" class="deleteEmailRow" name="abcs@test.com"><span><span><span class="delete">delete</span></span></span></button>
</td>
</tr>
<tr class="editorRow">
<td class="emailRow">
<input class="text-box single-line" id="EmailSuccessList_0c7f4c5f-7344-4b47-9202-3ff61ce843fc_" name="EmailSuccessList[0c7f4c5f-7344-4b47-9202-3ff61ce843fc]" type="text" value="abcs@test.com">
</td>
<td>
<button type="button" href="#" id="deleteEmailRow" class="deleteEmailRow" name="abcs@test.com"><span><span><span class="delete">delete</span></span></span></button>
</td>
</tr>
<tr>
<td colspan="3" align="right" class="lastRow">
<a href='/Settings/BlankEmailEditorRow?collectionName=EmailSuccessList' class=" sexysimple sexygreen" id='addNewSuccessEmail'><span class="add">Add new recipient</span></a>
</td>
</tr>
</table>
</fieldset>
</div><button type="submit" value="Save Configuration" id="save" name="save"></button> <a href="/Settings" id="cancelEdit">Cancel</a>
<div class="cancel" style="display: none">
<div id="dialog-confirm-cancel" title="Cancel Edit?" class="diag">
<p>
Any changes you have made will not be saved.
</p>
</div>
</div>
<div class="demo" style="display: none">
<div id="dialog-email-confirm" title="Delete Email?" class="dialogs-only">
<p>
Are you sure you wish to delete this recipient from the list : <span id="emailAddress" style="font-weight: bold;"></span>?
</p>
</div>
</div>
</fieldset>
</form>
<div id="footer"></div>
</div>
</div>
</div>
</body>
</html>
使用Google Chrome v14的测试
完整示例请参阅http://jsfiddle.net/SUYA7/
对于pageX/pageY,您使用的是文档/页面的相对位置,但是jQuery对话框需要的是相对于视窗的位置。
虽然不是问题的原因,但有多个元素具有相同的id
,这是无效的HTML。以下标记在示例中出现了4次:
<button type="button" href="#" id="deleteEmailRow" class="deleteEmailRow button sexybutton" name="abc.test@com"><span><span><span class="delete">delete</span></span></span></button>
问题是,position
选项在jQuery UI对话框需要一个数组,包含从视口左上角偏移像素的x,y坐标对(例如[350,100])
所以您不能使用<event.pageX, event.pageY>
,因为它们提供了鼠标指针相对于文档左上角的X和Y坐标。您需要提供客户端坐标
- 谷歌位置服务附近搜索结果基于正确的地图中心的位置
- 在谷歌地图上显示所有搜索到的位置结果
- 需要呈现MongoDB查询返回结果的特定索引/位置
- 为什么由于数组中数字1的位置,我会从函数中得到不同的结果
- 1行代码(console.log),代码中的两个位置=两个结果差异
- 为多个表单动态指定输出ajax成功结果的位置
- 隐藏的“纬度”和“lng”字段没有被删除,所以我的脚本仍在从不正确的地理位置中搜索纬度和液化天然气结果
- 查找主干集合上的位置仅返回一个结果
- 记录选定的文本位置,给出错误的结果
- 索引如何返回此示例的位置,结果不应该是 -1
- 返回到 ajax 结果页面上上次看到的位置
- 绝对位置;在不同的屏幕上获得不同的结果
- 两个按钮,可随背景位置变化而切换,并在输入中显示结果
- 如何从谷歌位置/地图获得更多结果
- 获取插入符号位置的常见解决方案会返回奇怪的结果
- 如何在mongodb / mongoose查询中改变基于参数的结果位置
- Javascript获取元素的值和位置,并将结果保存在对象数组中
- 如何将JavaScriptObject结果添加到SmartGWT中生成的HTML的特定位置
- 谷歌地图位置API地址自动完成和显示选择的结果
- Javascript和CSS动画没有将我的结果放在正确的位置