на jQuery.append () не работает в IE, Safari и Chrome
поэтому я использую функцию AJAX jQuery для чтения некоторого XML для меня, и это сработало просто отлично. Но теперь я пытаюсь манипулировать свойством отображения 4 различных динамически генерируемых divs, когда mouseup запускается из элементов опций. Размер и x/y divs определяются XML и анализируются.
моя проблема заключается в том, что эти divs либо не генерируются, либо просто не отображаются в IE, Safari и Chrome. В Firefox и Opera, они работают. Я используя jQuery .append () для создания divs, а затем.функция css () для управления ими. Глядя в инструментах разработчика Chrome, я вижу, что свойство css, изменяемое в скрипте, переопределяется свойством в таблице стилей. Какие-нибудь исправления?
Divs создан здесь:
case "dynamic":
var n = name;
switch(portion){
case "stub":
$('.ticket').append("<div class='stubEditable' id='"+n+"' title='stub'></div>");
break;
case "body":
$('.ticket').append("<div class='bodyEditable' id='"+n+"' title='body'></div>");
break;
}
break;
case "static":
var n = name;
switch(portion){
case "stub":
$('.ticket').append("<div class='stubEditable' id='"+n+"' title='stub'></div>");
break;
case "body":
$('.ticket').append("<div class='bodyEditable' id='"+n+"' title='body'></div>");
break;
}
break;
Mouseup функции, которые изменяют свойство отображения:
$('#StubTemplates').find('.ddindent').mouseup(function(){
var tVal = $(this).val();
var tTitle = $(this).attr('title');
if(!stubActive){
$('.stubEditable').css('display', 'none');
$('#'+tVal).css('display', 'block');
stubActive = true;
}else{
$('.stubEditable').css('display', 'none');
$('#'+tVal).css('display', 'block');
stubActive = false;
}
});
$('#StubTemplates').find('#stubTempNone').mouseup(function(){
$('.stubEditable').css('display', 'none');
});
$('#BodyTemplates').find('.ddindent').mouseup(function(){
var tVal = $(this).val();
var tTitle = $(this).attr('title');
if(!bodyActive){
$('.bodyEditable').css('display', 'none');
$('#'+tVal).css('display', 'block');
bodyActive = true;
}else{
$('.bodyEditable').css('display', 'none');
$('#'+tVal).css('display', 'block');
bodyActive = false;
}
});
$('#BodyTemplates').find('#bodyTempNone').mouseup(function(){
$('.bodyEditable').css('display', 'none');
});
3 ответов
поскольку вы можете видеть в dev tools, что стиль правильно добавлен к элементу, проблема не столько в JQuery, сколько в каскаде CSS. Обычно все, что добавляется непосредственно к элементу, должно иметь приоритет, но есть исключения. специфичность CSS может вызвать непредсказуемое поведение. У вас есть !важно где-то встать на пути?
кроме того, поскольку вы скрываете и показываете с помощью display:block и display:none, сделайте конечно, у вас нет видимости:скрытый в CSS, который будет переопределять.
кроме того, любая причина, по которой вы не просто используете .show () и .hide () или .toggle ()? Вы также можете попробовать удалить классы, которые мешают и устанавливают другие с помощью .removeClass(), .addClass () или .toggleClass().
Если все остальное терпит неудачу, вы всегда можете попробовать $('.bodyEditable').css ('display', ' none !важно');.
Я стараюсь избегать !важно, так как это вызывает так много головных болей...но это в спецификации по какой-то причине.
поэтому мне удалось решить проблему. Параметры в меню выбора не вызывали mouseup, поэтому я использовал a .функция change () в меню select при использовании: selected selector для поиска выбранного.
большое спасибо Брэдли за то, что поставил меня на правильный путь.
простое решение этой проблемы для меня: добавьте в div, который вы добавляете css display:block;
. вероятно, любой другой вид display:
может помочь.