2010-05-17 14 views
8

Quindi sto utilizzando la funzione AJAX di jQuery per leggere alcuni XML per me e ha funzionato bene. Ma ora sto provando a manipolare la proprietà display di 4 differenti div generate dinamicamente quando mouseup viene attivato dagli elementi opzione. La dimensione e x/y dei div sono determinati dall'XML e vengono analizzati.jQuery .append() non funziona in IE, Safari e Chrome

Il mio problema sta nel fatto che questi div non vengono generati o semplicemente non vengono visualizzati in IE, Safari e Chrome. In Firefox e Opera, funzionano. Sto usando jQuery's .append() per creare i div e quindi la funzione .css() per manipolarli. Guardando negli strumenti di sviluppo di Chrome, sto vedendo che la proprietà css che viene modificata nello script viene sovrascritta dalla proprietà nel foglio di stile. Qualche correzione?

div creato qui:

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; 

funzioni MouseUp che cambiano la proprietà di visualizzazione:

$('#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'); 
    }); 
+1

In ogni caso, è possibile tagliare lo snippet di codice in un esempio di ciò che sta causando il problema? O almeno fornire alcune informazioni sugli id ​​/ classi esatti che stanno causando il problema? Sarebbe utile anche qualsiasi formattazione che puoi fare per ripulire lo snippet. Saluti. – malonso

+0

Va bene, abbassa il più possibile. –

+0

'$ ('#' + tVal)' ugh. Qualcuno ha mai sentito parlare di 'document.getElementById (tval)'? L'id-getter hash-app di jQuery è così diffuso sul Web ... ma è così lento e sfacciato. –

risposta

4

Dal momento che si può vedere in strumenti di sviluppo che lo stile sia correttamente inserito l'elemento, la questione è non tanto su JQuery quanto sulla cascata di CSS. Normalmente, qualsiasi cosa aggiunta direttamente all'elemento come questo dovrebbe avere la precedenza, ma ci sono delle eccezioni. CSS specificity può causare un comportamento confuso. Hai qualcosa di importante da fare per intralciarti?

Inoltre, dal momento che ti stai nascondendo e mostrando con display: blocco e visualizzazione: nessuno, assicurati di non avere una visibilità: nascosto in CSS che sovrascriverà.

Inoltre, c'è un motivo per cui non si sta semplicemente utilizzando .show() e .hide() o .toggle()? Puoi anche provare a rimuovere le classi che si intromettono e impostarne altre utilizzando .removeClass(), .addClass() o .toggleClass().

Se tutto il resto fallisce puoi sempre provare $ ('. BodyEditable'). Css ('display', 'none! Important') ;.

Cerco di evitare! Importante perché causa così tanti mal di testa ... ma è nelle specifiche per un motivo.

+0

Non uno! Importante. Sia .stubEditable che .bodyEditable sono impostati per la visualizzazione: nessuno. –

+0

Ho appena aggiunto un collegamento nella mia risposta a un articolo sulla specificità CSS che potrebbe essere utile. Ho incontrato abbastanza spesso questo tipo di cose. Non sono affatto un guru dei CSS ... Di solito rimando al nostro redsident CSS guy del nostro team e quasi sempre arriva a un conflitto funky a cascata/specificità. Il fatto che tu possa vedere lo stile aggiunto agli elementi esclude JQuery ... a meno che JQuery non stia deformando in qualche modo l'attributo di stile. –

+0

Bradley, non sono più di una settimana nuova a jQuery, quindi sto cercando di assorbire il più possibile a questo punto. Utilizzerò sicuramente show() e hide() in futuro. Inoltre, ho provato removeClass() e addClass() senza alcun risultato. Entrambi saranno utilizzati anche quando possibile. Cercando di usare! Importante ignorare gli stili non ha fatto nulla, purtroppo. –

1

Quindi sono riuscito a risolvere il problema. Le opzioni nel menu di selezione non chiamavano il mouse, quindi ho usato una funzione .change() nel menu di selezione mentre utilizzavo: selettore selezionato per trovare ciò che era selezionato.

Grandi grazie a Bradley per avermi messo sulla strada giusta.

+0

Contento di aver potuto aiutare, Matt! –

0

soluzione semplice per questo problema per me: aggiungi al div che stai aggiungendo css display:block;. probabilmente qualsiasi altro tipo di display: potrebbe aiutare.

Problemi correlati