JQuery attr ('src') не определен в IE 8 (работает в FF) - PullRequest
7 голосов
/ 23 августа 2011

Это уже так далеко, что я подведу итог тому, что мы узнали:

  • Внутри обработчика событий атрибут src не может быть прочитан в IE8 (FF работает нормально), ни с jQuery, ни с обычным javascript

  • Единственный способ получить данные - это получить их вне обработчика, записать их в массив и затем прочитать изнутри обработчика

  • Но все еще не было возможности записи в src (ни jQuery, ни javascript не работали - только для IE 8)

  • Я получил его, написав самим иммигрантам документ, но причина этой проблемы не решена

Фрагмент, который мы имеем, используется дважды.

Старый код

<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>

Новый код

Пожалуйста, смотрите мой собственный ответ для нового кода.

UPDATE:

Это не работает, если вызывается внутри события click !!!

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

UPDATE !!!

Это просто безумие, я пытался записать данные с помощью обычного 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!

Ответы [ 7 ]

2 голосов
/ 24 августа 2011

Bing Bang Boom,

imgright = jQuery(".Image_right",this).attr('src');
2 голосов
/ 23 августа 2011

children ищет непосредственные дочерние элементы только тогда, когда find ищет все элементы в нем до его последнего дочернего элемента вниз по дереву dom.Если вы говорите, что find работает, это означает, что элемент, который вы ищете, не является его непосредственными потомками.

Попробуйте предупредить этого jQuery(this).children('#Image_center').length посмотрите, что вы получите.Даже если какой-либо элемент не найден, jQuery вернет объект emtpy, он никогда не будет нулевым.Поэтому предупредите, что объект emtpy всегда даст вам [object Object].Вы должны всегда проверять свойство length объекта jQuery.

Попробуйте это

alert(jQuery(this).find('#Image_center').length); // Чтобы проверить, найден элемент или нет.

1 голос
/ 07 июня 2013
$(document).ready(function () {
    $("#imgReload").click(function () {
        $('#<%=imgCaptcha.ClientID %>').removeAttr("src");
        $('#<%=imgCaptcha.ClientID %>').attr("src", "Captcha.ashx");
    });
});
1 голос
/ 24 августа 2011

Это дошло до того, что я подведу итог тому, что мы обнаружили:

  • Внутри обработчика событий атрибут src не может быть прочитан в IE8 (FF работает нормально), нис jQuery, ни с обычным javascript

  • Единственный способ получить данные - это получить их вне обработчика, записать их в массив и затем прочитать изнутри обработчика

  • Но все еще не было возможности записи в src (ни jQuery, ни javascript не работали - только для IE 8)

  • У меня все работаетзаписав сами элементы img в документ, но причина этой проблемы не решена

Новый код

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

});

ИтакЯ просто не использую .attr ('src') в обработчике событий ....

1 голос
/ 24 августа 2011

Попробуйте сделать задержку:

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

ОБНОВЛЕНИЕ

I 'Я не уверен, но, возможно, IE не может читать классы с заглавной первой буквой ... Попробуйте изменить ".Image_center" на ".image_center"

UPDATE

Проверьте свой код еще раз.У вас определенно есть какая-то ошибка.Попробуйте это jsfiddle в IE8, attr ('src') отображается правильно.http://jsfiddle.net/qzFU8/

1 голос
/ 23 августа 2011

проблема не в attr ('src') , а в чем-то другом. Следующий фрагмент кода работает в IE8:

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

    <script type="text/javascript">

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

    </script>

Но если вы, например, измените text / javascript на application / javascript - этот код будет работать в FF, но не будет работать в IE8

1 голос
/ 23 августа 2011

А почему бы вам не использовать один рабочий?

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

сменить детей, чтобы найти

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

Это, вероятно, самое простое решение, и когда оно работает, почему бы неВы используете это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...