2011-02-08 4 views
3

En HTML, j'ai une liste de boutons. Si l'utilisateur clique sur un bouton, la fonction
doCommand sera appelée. Le code suit,bouton onclick bind event

<ul> 
<li class="button1" onclick="doCommand('bold');" id="bold-button" title="bold">B</li> 
<li class="button2" onclick="doCommand('bold');" id="italic-button" title="bold">I</li> 
<li class="button3" onclick="doCommand('bold');" id="underline-button" title="bold">U</li> 
<li class="button4" onclick="doCommand('bold');" id="strikethrough-button" title="bold">S</li> 
</ul> 

C'est l'expression simple, programmeur web normal coderez comme ça. Mais, je veux cacher l'événement onclick et sa fonction pour des raisons de sécurité. Ainsi, le code HTML sera comme ça,

<ul> 
<li class="button1" id="bold-button" title="bold">B</li> 
<li class="button2" id="italic-button" title="bold">I</li> 
<li class="button3" id="underline-button" title="bold">U</li> 
<li class="button4" id="strikethrough-button" title="bold">S</li> 
</ul> 

est-il un moyen efficace de le faire? Masquez la propriété onclick mais faites le même travail. J'utilise jQuery.

+0

Copie possible de [écouteur d'événement de clic Javascript sur la classe] (http://stackoverflow.com/questions/19655189/javascript-click-event-listener-on-class) – Loktar

Répondre

5

si vous définissez la même classe pour les btns, vous pouvez facilement faire:

balisage:

<ul> 
<li class="button1 clickable" id="bold-button" title="bold">B</li> 
<li class="button2 clickable" id="italic-button" title="bold">I</li> 
<li class="button3 clickable" id="underline-button" title="bold">U</li> 
<li class="button4 clickable" id="strikethrough-button" title="bold">S</li> 
</ul> 

js:

$('.clickable').click(function(){/* doCommand('bold') or whatever */}) 

Modifier: si vous voulez le clic pour transformer directement le texte en gras, vous pouvez utiliser le ce (qui se réfère à l'élément sur lequel vous avez cliqué, un d vous devez envelopper l'intérieur mot-clé dans la fonction c.-à-

$('.clickable').click(function(){$(this).css('font-weight','bold')}) 
+0

mais, comment puis-je savoir quel bouton a été cliqué ? –

+0

à l'intérieur de la fonction, le "ceci" fait référence au bouton 'li' sur lequel vous avez cliqué .. si vous alertez this.id il vous montrera le bon identifiant pour chaque bouton .. – stecb

+0

ah ~ merci steweb ^^; –

5

La classe doit être le même à tous les boutons, comme ce jQuery $):

<li class="button button1"... 
<li class="button button2"... 

Ensuite, vous pouvez le faire comme ça dans javascript.

$("li.button").click(function() { 
    doCommand('bold'); 
}); 
+0

Peut-être que nous pouvons réutiliser l'attribut de titre? doCommand (this.attr ('title')); – erickb

1

Vous pouvez utiliser le document de jquery événement prêt à câbler les événements:


$(function() 
{ 
    $("#bold-button").click(function(){doCommand('bold');}); 
} 
); 
1

Sans changer votre balisage et à l'aide JS vanille vous pouvez le faire de la façon suivante.

const list = document.querySelector('ul'); 
 

 
list.addEventListener('click', e => { 
 
    if (e.target.classList.contains('button1')) { 
 
    console.log('bold'); 
 
    }; 
 
    if (e.target.classList.contains('button2')) { 
 
    console.log('italics'); 
 
    }; 
 
    if (e.target.classList.contains('button3')) { 
 
    console.log('underline'); 
 
    }; 
 
    if (e.target.classList.contains('button4')) { 
 
    console.log('strikethrough'); 
 
    }; 
 

 
})
<ul> 
 
    <li class="button1" id="bold-button" title="bold">B</li> 
 
    <li class="button2" id="italic-button" title="bold">I</li> 
 
    <li class="button3" id="underline-button" title="bold">U</li> 
 
    <li class="button4" id="strikethrough-button" title="bold">S</li> 
 
</ul>

J'assignez l'événement à la liste des parents, et vérifier la classe de la cible permettant de faire toutes les mesures nécessaires.