2012-06-09 6 views
1

Pour rendre cela plus clair, je vais utiliser mon code ci-dessous:vol stationnaire CSS remplaçant style Javascript

J'ai un récipient diviseur, "c_container":

<div id="c_container"> 
<div id="c_tab">Menu</div> 
<div id="c_main">MenuContent</div> 
</div> 

Ensuite, je CSS qui contrôle son style :

#c_container { 
    width: 550px; 
    height: 265px; 
    position: fixed; 
    left: -550px; 
    margin-left: 35px; 
    top: 50%; 
    margin-top: -100px; 
} 
#c_container:hover{ 
    margin-left: 0px; 
    left: -40px; 
} 

Puis, après mettre à jour le style en utilisant Javascript d'une fonction onClick:

function hideForm(){ 
    var msg = document.getElementById("c_container"); 
    msg.style.left = "-550px"; 
} 

Le survol CSS affecte uniquement la propriété margin et n'affecte pas la propriété left comme auparavant. C'est comme si javascript l'avait verrouillé.

+1

Votre code contient-il également des citations incorrectes? Vous devez utiliser '' 'à l'intérieur de la chaîne' onclick = "..." 'ou utiliser' onclick = '...' '- vous ne pouvez pas utiliser le même type de citation que celui utilisé pour citer la valeur de l'attribut. – ThiefMaster

+0

Désolé, oui c'est le cas. Je vais éditer –

+0

Curieux ... pourquoi cachez-vous de force 'c_container' s'il se cache lorsque l'utilisateur déplace la souris? – saluce

Répondre

1

rencontrerez des problèmes avec des virgules dans la fonction onclick ...

onclick="document.getElementById('div').style.left='-550px;'" 

et 'div' est pas bon nom pour id.

Votre CSS porte à confusion. Pour appliquer balise DIV

div { 
    position: fixed; 
    left: -550px; 
} 
div:hover{ 
    left: 0px; 
} 

OU

#DIV_ID { ... } 

OU

.CLASSNAME { ...} 

EDIT

Je suis recriate votre exemple ... http://jsfiddle.net/PAg9M/1/ et le travail pour moi. De quoi as-tu besoin?

3

jQuery:

//Normal: 
$('elementNameOrID').hover (function() { 
    $(this).css('left', 0); 
}, function() { 
    $(this).animate('left', -500); 
}); 

//Nice: 
$('elementNameOrID').hover (function() { 
    $(this).animate({left: 0}); 
}, function() { 
    $(this).animate({left: -500}); 
}); 

JS:

onclick = function() { 
    document.getElementById("div").style.left = '-550px'; 
}; 

Sidenote: En utilisant div comme un nom pour un élément n'est pas une bonne idée et très déroutant et trompeur en lisant votre code.

1

Les styles ajoutés au style JavaScript créent un style en ligne dont la priorité est supérieure à celle de votre feuille de style. Pour corriger cela, vous pouvez ajouter !important à votre feuille de style:

#c_container:hover{ 
    margin-left: 0px; 
    left: -40px !important; 
} 
+0

Le problème est que la propriété left est surchargée par javascript et non par left-left. Si j'applique! Important à la propriété de gauche javascript n'affecte pas sa position –

+0

Oups, j'ai ajouté que pour le mauvais article, destiné à l'ajouter à 'left' pas' marge-left'. –

+0

J'ai essayé cela, puis la fonction style.left de javascript ne change pas sa position. –

0

Vous êtes face à ce problème, car en ligne css plus grande priorité que nantis d'une dans la balise « style » et javascript ajouter css en ligne.

Alors que javascript devrait utiliser pour faire this-

modifier votre html-

<div id="c_container" onmouseover="style.left='0'" onmouseout="style.left='-550'"> 
<div id="c_tab">Menu</div> 
<div id="c_main">MenuContent</div> 
</div> 

Cela va régler votre problème.