【发布时间】:2013-06-07 19:11:34
【问题描述】:
到目前为止,我将总结我们的发现:
在事件处理程序内部,属性 src 无法在 IE8 中读取(FF 工作正常),无论是使用 jQuery 还是使用通常的 javascript
获取数据的唯一方法是在处理程序外部获取数据,将其写入数组,然后从处理程序内部读取数据
但仍然无法写入 src(jQuery 和 javascript 都不起作用 - 仅适用于 IE 8)
我已经通过将 img 元素本身写入文档来使其工作,但是这个问题背后的原因没有解决
我们的sn-p被使用了两次。
旧代码
<script type="text/javascript">
jQuery(document).ready(function() {
//...
//view entry
jQuery('.blogentry').live('click',function(){
// Get contents
blogtext = jQuery(this).children('.blogtext').html();
blogauthor = jQuery(this).children('.onlyblogauthor').html();
blogtitle = jQuery(this).children('.blogtitle').html();
profileimage = jQuery(this).children('.profileimage').html();
imgleft = jQuery(this).children('.Image_left').attr('src');
imgcenter = jQuery(this).children('.Image_center').attr('src');
imgright = jQuery(this).children('.Image_right').attr('src');
// Write contents
jQuery('#bild_left').attr('src', imgleft);
jQuery('#bild_center').attr('src', imgcenter);
jQuery('#bild_right').attr('src', imgright);
jQuery('.person').attr('src', profileimage);
jQuery('#g_fb_name').html(blogauthor);
jQuery('#g_titel').html(blogtitle);
jQuery('#g_text').html(blogtext);
//...
});
//...
// Change entry
jQuery('.blogentry').each(function(){
entryindex = jQuery(this).attr('rel');
if (entry == entryindex)
{
// The following works fine (so 'children' works fine):
blogtext = jQuery(this).children('.blogtext').html();
blogauthor = jQuery(this).children('.onlyblogauthor').html();
blogtitle = jQuery(this).children('.blogtitle').html();
profileimage = jQuery(this).children('.profileimage').html();
// This does not work - only in IE 8, works in Firefox
imgleft = jQuery(this).children('.Image_left').attr('src');
imgcenter = jQuery(this).children('.Image_center').attr('src');
imgright = jQuery(this).children('.Image_right').attr('src');
//alert: 'undefined'
alert(jQuery(this).children('.Image_center').attr('src'));
//...
}
}
//...
});
</script>
新代码
请查看我自己发布的新代码答案。
更新:
如果在点击事件中调用,这不起作用!!!
jQuery('.Image_left').each(function(){
alert(jQuery(this).attr('src'));
});
获取图像数据的解决方案:
relcounter = 1;
imgleft_array = new Array();
jQuery('.Image_left').each(function(){
imgleft_array[relcounter] = jQuery(this).attr('src');
relcounter++;
});
relcounter = 1;
imgcenter_array = new Array();
jQuery('.Image_center').each(function(){
imgcenter_array[relcounter] = jQuery(this).attr('src');
relcounter++;
});
relcounter = 1;
imgright_array = new Array();
jQuery('.Image_right').each(function(){
imgright_array[relcounter] = jQuery(this).attr('src');
relcounter++;
});
//... inside the eventhandler (entryindex = 'rel' of blogentry):
imgleft = imgleft_array[entryindex];
imgcenter = imgcenter_array[entryindex];
imgright = imgright_array[entryindex];
这是可行的,因为它没有在事件处理程序内部调用,并且源是预先保存的
但是! 我仍然无法写入数据,这是我的目标:
jQuery('#bild_left').attr('src', imgleft);
jQuery('#bild_center').attr('src', imgcenter);
jQuery('#bild_right').attr('src', imgright);
更新!!!
这太疯狂了,我尝试通过普通的 javascript 编写数据。这也适用于 FF,但不适用于 IE8。属性 src 确实存在一些严重的问题:
document.getElementById('bild_left').src = imgleft;
document.getElementById('bild_center').src = imgcenter;
document.getElementById('bild_right').src = imgright;
alert(document.getElementById('bild_left').src);
这在FF中有效,但在IE8中无效,属性src在写入后仍然未定义!这似乎根本不是 jQuery 问题!
【问题讨论】:
-
能否提供相关的html?
-
尝试使用 "console.log(...)" 以及 ie/ff(firebug)/chrome 的 "developper tools" 而不是 "alert(...)"。您将能够详细检查该元素。 “[Object object]”可能意味着一个元素由 jquery 函数返回......或一个错误对象。所以控制台在这里很方便。
-
我已经提供了html代码。到目前为止,我已经证明,返回了一个有效的对象。 console.log() 确实会抛出错误,这是否仅适用于某个插件?
-
我认为你应该向我们展示整个点击功能。因为你的 sn-ps 自己没问题。
-
我添加了代码并显示了两个处理程序。它使用了两次,但在两种情况下的作用相同......我现在通过用 html() 编写 img 元素来让它工作。非常感谢你。我想这将成为一个谜;-)
标签: javascript jquery internet-explorer-8