2011-08-17 15 views
1

私の質問はOpening JQuery Ui Dialog in MousePositionと似ていますが、クリックしたボタンのすぐ近くにJqueryダイアログボックスを表示したい点が異なります。私の現在の問題は、私はposition属性を設定する際は、以下を使用した場合意図したとおりPageYとClientYマウスの位置を使用した相違の結果

$("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 websiteによれば、最初のスクリプトが機能するはずです。

マウスの動きを追跡するときは、通常、実際のマウスポインタの位置は である必要があります。 ハンドラに渡されるイベントオブジェクトには、マウス座標に関する情報が含まれています。 .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を読み、また期待通りに動作some test codeの周り果たしています。なぜ私のスクリプトで違いが生じるのですか?私の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="[email protected]"> 
         </td> 
         <td> 
         <button type="button" href="#" id="deleteEmailRow" class="deleteEmailRow" name="[email protected]"><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="[email protected]"> 
         </td> 
         <td> 
         <button type="button" href="#" id="deleteEmailRow" class="deleteEmailRow" name="ab[email protected]"><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="[email protected]"> 
         </td> 
         <td> 
         <button type="button" href="#" id="deleteEmailRow" class="deleteEmailRow" name="[email protected]"><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="[email protected]"> 
         </td> 
         <td> 
         <button type="button" href="#" id="deleteEmailRow" class="deleteEmailRow" name="[email protected]"><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/を参照してください。

+0

あなたのHTMLとCSSには、まったく関係がありますが、質問には欠けています。問題の実例を提供してください。 – andyb

+0

私のコンピュータにあなたのCSSはありません。あなたはjsFiddleで実用的な例を提供できますか? – andyb

+0

@andyb - http://jsfiddle.net/SUYA7/ – Ahmad

答えて

1

pageX/pageYを使用すると、ドキュメント/ページ相対位置を使用していますが、jQueryダイアログでは、ビューポートからの相対的な位置が必要です。

+0

それは同じものではありませんか?私のドキュメントは、ビューポート(ビューポートはHTML構造ではないので、CSS 'http://www.quirksmode.org/mobile/viewports.htmlで影響を受けることはできません)と同じくらい広く、 – Ahmad

1

問題の原因ではありませんが、無効なHTMLである同じidを持つ複数の要素があります。次のマークアップは、実施例では4回発生:

<button type="button" href="#" id="deleteEmailRow" class="deleteEmailRow button sexybutton" name="[email protected]"><span><span><span class="delete">delete</span></span></span></button> 

問題は、Xを含む配列

を必要jQueryのUIダイアログのpositionオプションは、Yがでペア座標点であります左からピクセルオフセット、ビューポート(例:彼らは文書の左上隅にマウスポインタの相対的なXとY座標を提供するので、[350100])

ので、あなたは<event.pageX, event.pageY>を使用することはできません。あなたはクライアントの座標を提供する必要があります。

関連する問題