Javascript IE8中未定义的Jquery属性(';src';)(在FF中工作)

Javascript IE8中未定义的Jquery属性(';src';)(在FF中工作),javascript,jquery,internet-explorer-8,Javascript,Jquery,Internet Explorer 8,到目前为止,我将总结我们的发现: 在事件处理程序中,属性src不能在IE8中读取(FF可以正常工作),无论是jQuery还是普通javascript 获取数据的唯一方法是从处理程序外部获取数据,将其写入数组,然后从处理程序内部读取数据 但是仍然不可能写入src(jQuery和javascript都不起作用——只适用于IE8) 我通过将img元素本身写入文档来实现这一点,但是这个问题背后的原因没有得到解决 我们的代码片段被使用了两次 旧代码 <script type="text/java

到目前为止,我将总结我们的发现:

  • 在事件处理程序中,属性src不能在IE8中读取(FF可以正常工作),无论是jQuery还是普通javascript

  • 获取数据的唯一方法是从处理程序外部获取数据,将其写入数组,然后从处理程序内部读取数据

  • 但是仍然不可能写入src(jQuery和javascript都不起作用——只适用于IE8)

  • 我通过将img元素本身写入文档来实现这一点,但是这个问题背后的原因没有得到解决

我们的代码片段被使用了两次

旧代码

<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>
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++;
});

//view entry
jQuery('.blogentry').live('click',function(){
    // Get contents
    entryindex = jQuery(this).attr('rel');
    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 = imgleft_array[entryindex];
    imgcenter = imgcenter_array[entryindex];
    imgright = imgright_array[entryindex];

    // Write contents
    jQuery('#entryimages').html('');
    jQuery('#entryimages').html('<img class="rotate" width="132" height="138" id="bild_left" src="'+imgleft+'" /><img class="rotateright" width="154" height="162" id="bild_center" src="'+imgcenter+'" /><img class="rotate" width="132" height="138" id="bild_right" src="'+imgright+'" />');

    jQuery('.person').attr('src', profileimage);
    jQuery('#g_fb_name').html(blogauthor);
    jQuery('#g_titel').html(blogtitle);
    jQuery('#g_text').html(blogtext);

});
获取图像数据的解决方案:

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的问题

你为什么不轻松地使用一个工作模式呢

alert(jQuery(this).children('#Image_center').attr('src'));
更改子项以查找

alert(jQuery(this).find('#Image_center').attr('src'));

这可能是最简单的解决方案,当它起作用时,为什么不使用它呢?

子元素
只在as
find
查找其中的所有元素,直到dom树中的最后一个子元素。如果您说
find
正在工作,则表示您正在查找的元素不是它的直接子元素

试着提醒这个
jQuery(this).children(“#Image_center”).length
看看你得到了什么

仅供参考。即使找不到任何元素,jQuery也将返回一个emtpy对象,它永远不会为null。因此,emtpy对象将始终向您发出警报
[object object]
。您应该检查jQuery对象的
length
属性

试试这个


alert(jQuery(this.find)('Image#u center').length)//检查是否找到元素。

问题不在于属性('src')。以下代码段适用于IE8:

    <img id="xxx" src="yrdd">

    <script type="text/javascript">

        alert($('#xxx').attr('src'));

    </script>

警报($('#xxx').attr('src'));
但是,例如,如果您将文本/javascript更改为应用程序/javascript-此代码将在FF中工作,但在IE8中不工作,请尝试进行延迟:

jQuery(document).ready(function() {

  setTimeout(function () {

    jQuery('.blogentry').each(function(){
      // your code...
    });

  }, 100); // if doesn't work, try to set a higher value

});
更新

希望这个代码能起作用

$('.blogentry img').each(function(){
  alert( $(this).attr('src') );
});
更新

我不确定,但也许我看不懂大写字母的课。。。 尝试将“.Image\u center”更改为“.Image\u center”

更新

再次检查您的代码。你肯定有错误。在IE8中尝试这个JSFIDLE,attr('src')显示正确

Bing-Bang-Boom

imgright = jQuery(".Image_right",this).attr('src');

到目前为止,我将总结我们的发现:

  • 在事件处理程序中,属性src不能在IE8中读取(FF可以正常工作),无论是jQuery还是普通javascript

  • 获取数据的唯一方法是从处理程序外部获取数据,将其写入数组,然后从处理程序内部读取数据

  • 但是仍然不可能写入src(jQuery和javascript都不起作用——只适用于IE8)

  • 我通过将img元素本身写入文档来实现这一点,但是这个问题背后的原因没有得到解决

新代码

<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>
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++;
});

//view entry
jQuery('.blogentry').live('click',function(){
    // Get contents
    entryindex = jQuery(this).attr('rel');
    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 = imgleft_array[entryindex];
    imgcenter = imgcenter_array[entryindex];
    imgright = imgright_array[entryindex];

    // Write contents
    jQuery('#entryimages').html('');
    jQuery('#entryimages').html('<img class="rotate" width="132" height="138" id="bild_left" src="'+imgleft+'" /><img class="rotateright" width="154" height="162" id="bild_center" src="'+imgcenter+'" /><img class="rotate" width="132" height="138" id="bild_right" src="'+imgright+'" />');

    jQuery('.person').attr('src', profileimage);
    jQuery('#g_fb_name').html(blogauthor);
    jQuery('#g_titel').html(blogtitle);
    jQuery('#g_text').html(blogtext);

});
relcounter=1;
imgleft_数组=新数组();
jQuery('.Image_left')。每个(函数(){
imgleft_数组[relcounter]=jQuery(this.attr('src');
relcounter++;
});
relcounter=1;
imgcenter_array=新数组();
jQuery('.Image_center')。每个(函数(){
imgcenter_数组[relcounter]=jQuery(this.attr('src');
relcounter++;
});
relcounter=1;
imgright_数组=新数组();
jQuery('.Image_right')。每个(函数(){
imgright_数组[relcounter]=jQuery(this.attr('src');
relcounter++;
});
//视图条目
jQuery('.blogentry').live('click',function()){
//获取内容
entryindex=jQuery(this.attr('rel');
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=imgleft_数组[entryindex];
imgcenter=imgcenter_数组[entryindex];
imgright=imgright_数组[entryindex];
//写内容
jQuery('#entryimage').html('';
jQuery('#entryimage').html('';
jQuery('.person').attr('src',profileimage);
jQuery('#g#u fb_name').html(blogauthor);
jQuery('#g#titel').html(blogttitle);
jQuery('g#u text').html(blogtext);
});
所以我只是没有在事件处理程序中使用.attr('src')。

$(document).ready(function(){
$(document).ready(function () {
    $("#imgReload").click(function () {
        $('#<%=imgCaptcha.ClientID %>').removeAttr("src");
        $('#<%=imgCaptcha.ClientID %>').attr("src", "Captcha.ashx");
    });
});
$(“#imgReload”)。单击(函数(){ $(“#”).removeAttr(“src”); $('#').attr(“src”,“Captcha.ashx”); }); });
您也可以提供相关的html吗?请尝试使用ie/ff(firebug)/chrome的“console.log(…)”和“developper tools”,而不是“alert(…)”。您将能够详细检查该元件。“[Object]”可以表示jquery函数返回了一个元素。。。或错误对象。所以控制台在这里很方便。我已经提供了html代码。到目前为止,我已经证明了,返回的是一个有效的对象。console.log()确实会抛出一个错误,这是否只适用于某个插件?我认为您应该向我们展示整个click函数。因为您的代码片段本身就可以了。我添加了代码并显示了这两个处理程序。它使用了两次,但在两种情况下的作用相同。。。通过使用html()编写img元素,我现在已经可以工作了。太感谢你了。