2012-01-27 2 views
1

Странный вопрос. Этот код отлично работает в Chrome/IE. Однако по какой-то причине он не работает в FF 3.6. Консоль не показывает ошибок JS.jQuery.attr ('src') заменить не работает в FF

Предполагается, что все изображения с определенным атрибутом src и hover заменяют src (я знаю о других подходах, таких как css hover и т. Д., Есть причина, по которой я использую эту технику - это не просто опрокидывания, это анимированные видеоролики).

$("img[src*='libraries/phpthumb/phpThumbYT.php']").each(function(){ 
var t=$(this); 
var src1= t.attr('src'); // initial src 
var old_src = src1.substring(src1.lastIndexOf('media/'), src1.lenght);; // extract old source attr  
var media_id = old_src.substring(6,8); // extract media ID (directory name) 
if (old_src.indexOf("animation=1") != -1) 
{ 
    t.hover(function(){ 
     // on hover 
     $(this).attr('src', 'libraries/phpthumb/phpThumbYT.php?w=131&h=92&far=C&iar=1&sfn=3&zc=C&f=gif&src=http://domain.name/media/'+media_id+'/preview.gif'); 
    }, function(){ 
     // on rollout 
     $(this).attr('src', src1); 
    }); 
} 
}); 

Я подозреваю, что может быть проблема с селектором, может быть? Есть идеи?

+2

'lenght' обычно ** не ** свойство' String'. – alex

+0

Типо на линии 4? –

+0

Ну, я не эксперт в JS, но http://www.w3schools.com/jsref/jsref_length_string.asp говорит, что это так. Тем не менее, он работает в Chrome/IE, поэтому я не думаю, что это может быть причиной поведения FF? – Michal

ответ

1

Окончательно нашли решение.

Проблема была в том, что src1.lenght сгенерировано 'undefined' значение. Несмотря на то, что Алекс предложил источник проблемы, документация на W3C показала длину как допустимое свойство строки.

Однако проблема сама по себе была вызвана другой обработкой значения 'undefined' в src1.substring(src1.lastIndexOf('media/'), src1.lenght);. Chrome и IE приняли значение 'undefined' просто как нет, поэтому строка была разобрана до конца. Однако в FF функция подстроки не смогла полностью вернуть целую строку.

После устранения этой проблемы я модифицировал скрипт с помощью подстроки только с одним аргументом, так как я действительно хотел, чтобы он разбирался до конца, поэтому второй параметр вообще не нужен.

Beneath - это последний код, который работает в Chrome + IE + FF.

$("img[src*='libraries/phpthumb/phpThumbYT.php']").each(function(){ 
var t=$(this); 
var src1= t.attr('src'); // initial src 
var old_src = src1.substring(src1.lastIndexOf('media/')); // extract old source attr  
var media_id = old_src.substring(6,8); // extract media ID (directory name) 
media_id = media_id.replace('/',''); // trim '/' from the end of media_id in case the ID is < 10 
if (old_src.indexOf("animation=1") != -1) 
{ 
    t.hover(function(){ 
     // on hover 
     $(this).attr('src', 'libraries/phpthumb/phpThumbYT.php?w=131&h=92&far=C&iar=1&sfn=3&zc=C&f=gif&src=http://slovoprekazdeho.sk/media/'+media_id+'/preview.gif'); 
    }, function(){ 
     // on rollout 
     $(this).attr('src', src1); 
    }); 
} 
}); 
+0

+1 Хорошее объяснение дорого! – enam

+0

thanx enam :) мой первый пост когда-либо ... – Michal

Смежные вопросы