1

我在一个通过 AJAX 动态加载的 plupload 中使用,而且这个表单有一个验证码图像。我正在努力使 plupload 垫片正确定位。然后我找到了一个适用于几乎所有浏览器的解决方案,除了谷歌浏览器。这是我的解决方案:

<span id="upl_container" style="position:relative;">
    <input type="button" id="my_button" value="Click me to upload something" />
</span>

在我设置的上传器设置中:

        browse_button : 'my_button',
        container : 'upl_container',

现在这使得 shim 绝对定位在相对父级中,其中父级(跨度)正是按钮的大小(我不能使用 div,因为它占用其父级的 100% 宽度,然后 plupload 在所有位置上都有定位问题浏览器)。

当我检查 Firefox 中的 plupload shim 设置时(它的位置正确),我看到以下内容:

element.style {
    background: none repeat scroll 0 0 transparent;
    height: 28px;
    left: 0;
    position: absolute;
    top: -4px;
    width: 78px;
    z-index: 99999;
}

但在 Chrome 中它向我显示:

element.style {
position: absolute;
background: transparent;
z-index: 99999;
top: 0px;
left: 146px;
width: 70px;
height: 23px;
background-position: initial initial;
background-repeat: initial initial;
}

显然,left 属性太大了。

现在我不在乎它是否是一个错误,我只想找到一些解决方法,如何强制 plupload 的左侧为 0。我尝试添加一个 Javascript 代码,在 Init、Refresh 中将 left 设置为 0, PreInit 回调 plupload,但这无济于事,左侧无论如何都会跳转到 146px。

有什么方法可以强制 shim 的左侧为 0px?

(顺便说一句,我已将 Flash 设置为默认的 plupload 运行时,并回退到 HTML4 和 HTML5)。

4

2 回答 2

1

好的,所以我使用了以下丑陋的代码:

uploader.bind('Refresh', function(up) {
    $('#'+up.settings.container + ' > div').css('left',0);
    $('#'+up.settings.container + ' > div').css('top',0);
    $('#'+up.settings.container + ' > div').css('width','100%');
    $('#'+up.settings.container + ' > div').css('height','100%');
    $('#'+up.settings.container + ' > form').css('left',0);
    $('#'+up.settings.container + ' > form').css('top',0);
    $('#'+up.settings.container + ' > form').css('width','100%');
    $('#'+up.settings.container + ' > form').css('height','100%');
    $('#'+up.settings.container + ' > div').children().css('left',0);
    $('#'+up.settings.container + ' > div').children().css('top',0);
    $('#'+up.settings.container + ' > div').children().css('width','100%');
    $('#'+up.settings.container + ' > div').children().css('height','100%');
    $('#'+up.settings.container + ' > div').children().css('font-size','20px');// default is 999px, which breaks everything in firefox
})

耶!它适用于 flash、htm5、htm4 runimes,在 Chrome、Firefox、IE7、IE9 上都经过测试。垫片终于到位了。

于 2011-10-29T20:56:38.150 回答
1

在动态加载和切换的内容上,垫片没有位于正确的位置时,我遇到了问题。

$('#my_button').mouseenter(function() {
    uploader.refresh();
});

足以修复它。

于 2011-12-22T06:50:58.463 回答