Firefox Fieldset中的HTML Fieldset不正确JQuery.position

时间:2014-12-04 09:13:10

标签: javascript jquery html

我尝试使用keydown事件在字段集内移动控件,但是在Firefox中向上或向下移动控件1px会导致每次按向上或向下键时都会大幅跳转。

我使用jQuery来获取控件的位置,它似乎在位置对象的Top属性中添加18或20像素。在Chrome和IE10中,jQuery方法似乎有效。

所以我尝试了普通的JavaScript,但这看起来更糟,我在Firefox和Chrome中遇到了同样的问题。

第一个JSFiddle使用jQuery。第二种是使用普通的JavaScript。

JSFiddle with jQuery

JSFiddle with plain JavaScript

<code>
html:
<label id='Lbl_Position'></label>

<fieldset id='MyFieldSet' style='border: 1px solid black; position:absolute;top:30px; left:30px; width:300px; height: 100px;'>
    <legend>blablablabla</legend>
    <label id='MyLabel'>Some Label</label>
</fieldset>

js:
$(document).ready(function ()
{
    $("#MyFieldSet").resizable();
    $("#MyLabel").css({"position": "absolute", "top": " 20px"});
   $(document)
    .keydown(function (event)
    {
        var $SelectedControl = $("#MyLabel");
        $("#Lbl_Position").text($SelectedControl.position().top);

        if (event.which == '40') // down
        {
            var Top = $SelectedControl.position().top + 1;

            $SelectedControl.css({"top": Top + "px"});
        }
        else if (event.which == '38') // up
        {
            var Top = $SelectedControl.position().top - 1;

            $SelectedControl.css({ "top": Top + "px" });
        }
    });

});

我添加了可调整大小,以便尽可能接近我的实际工作。我错过了什么吗?任何人都有任何想法如何使这个工作?

1 个答案:

答案 0 :(得分:0)

而不是使用position()尝试使用css(),它适用于我

$(document).ready(function ()
{
    $("#MyFieldSet").resizable();
    $(document).keydown(function(event)
    {
       var pos=parseInt($("#MyLabel").css("top"));

        if (event.which == '40') // down
        {   pos=pos+1;
        }else if (event.which == '38') // up
        {   pos=pos-1;
        }
        $("#Lbl_Position").text(pos);
        $("#MyLabel").css({"top":pos + "px"});
    });

});

demo