на 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: может помочь.