Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Странности undefined в IE7 и JSON (https://javascript.ru/forum/jquery/26547-strannosti-undefined-v-ie7-i-json.html)

Viper 12.03.2012 15:11

Странности undefined в IE7 и JSON
 
Набросал небольшой плагин который лепит языковые переменные к элементам в DOM.

;(function($, window, document, undefined){
	$.fn.procLang = function(options){
		options = $.extend({}, $.fn.procLang.defaultOptions, options);

		$.each(options.lang_object, function(k, obj){
			if (obj.type != 'undefined') {
				if (obj.type == 'value') {
					$(obj.selector).val(obj.text);
				} else if (obj.type == 'html') {
					$(obj.selector).html(obj.text);
				} else if (obj.type == 'attr') {
					$(obj.selector).prop(obj.text);
				} else if (obj.type == 'document') {
					$(document).prop('title', obj.text);
				} else {
					$(obj.selector).text(obj.text);
				}
			} else {
				$(obj.selector).text(obj.text);
			}
		});
		return this;
	};
	$.fn.procLang.defaultOptions = {
		lang_object: {} // Required
	}
})(jQuery, window, document);


Прост до безобразия. И есть массив json вида

var lang = {
	settingspage: {
		texts: [
			{selector: "document", type: "document", text: "Настройки"},
			{selector: ".settings_global", type: "text", text: "Настройки"},
			{selector: ".subscribers", type: "text", text: "Участники"},
			{selector: ".conferences", type: "text", text: "Конференции"},
			{selector: ".presets", type: "text", text: "Пресеты"},
			{selector: ".save", text: "Сохранить"},
			{selector: ".cancel", text: "Отмена"},
			{selector: ".separator_logging", text: "Настройки логирования событий"},
			{selector: ".separator_server", text: "Настройки сервера"},
			{selector: ".separator_conferences", text: "Список всех конференций"}
		]
	}
}


Проблема возникает в IE7 при проверке на undefined. IE говорит что нет такой проперти как type у obj. И сообщает что оно почему-то у него NULL.

Что это за косяк такой?
PS! Просто лепить type для каждого элемента накладно, и не всегда нужно.

nikita.mmf 12.03.2012 15:27

Надо заменить
if (obj.type != 'undefined')

на
if ( "type" in obj )

Viper 12.03.2012 15:55

Не помогло. Все равно ругается.

nikita.mmf 12.03.2012 17:26

так что у Вас null obj или type?

vasa_c 12.03.2012 18:04

ну, в obj.type не содержится строки "undefined"...

Viper 14.03.2012 09:28

null type. Obj есть всегда. Вот только непонятно почему такая проверка не работает в IE7...

nikita.mmf 14.03.2012 12:53

на эту строку
if ( "type" in obj )

будет ругаться только если obj = null


Часовой пояс GMT +3, время: 00:09.