miércoles, 3 de enero de 2018

Javascript Parte LXXI

El operador == primero hace la conversión a un mismo tipo de dato para verificar si son iguales, en cambio el operador === llamado operador de igualdad estricta compara los valores sin hacer conversiones. Esto hace que cuando utilizamos el operador === retorne siempre false en caso que las variables que comparamos sean de distinto tipo.
El siguiente if se verifica verdadero ya que con el operador == primero se transforman los dos valores al mismo tipo de datos previos a verificar su igualdad:
  var v1='55';
  if (v1==55)
    document.write('son iguales');
En cambio el siguiente if utilizando el operador de igualdad estricta se verifica false ya que son variables o valores de distinto tipo:
  var v1='55';
  if (v1===55)
    document.write('son iguales');
Los operadores != y !== son los opuestos de == y ===.
El operador != retorna true si son distintos previo conversión a un mismo tipo de dato y el operador !== retorna true si los valores son distintos sin hacer una conversión previa, teniendo en cuenta que para tipos de datos distintos es true el valor retornado.
El siguiente if se verifica false:
  var v1='55';
  if (v1!=55)
    document.write('son distintos');
En cambio utilizando el operador !== se verifica verdadero ya que son tipos de datos desiguales:
  var v1='55';
  if (v1!==55)
    document.write('son distintos');
El operador de igualdad estricto === analiza los operandos de la siguiente forma:
  • Si los dos valores son de diferente tipo luego el resultado es false.
  • Si los dos valores almacen null luego el resultado es true. Lo mismo si los dos valores almacenan undefined.
  • Si uno de los valores almacena el valor NaN luego la condición se verifica como false.
El operador de igualdad == analiza los operandos de la siguiente forma:
  • Si los dos operandos no son del mismo tipo el operador == primero verifica si uno de los valores es null y el otro undefined luego retorna true, si uno es un número y el otro un string convierte a string el número y luego compara, si uno de los valores es true convierte este a 1 y luego compara, si uno de los valores es false convierte este a 0 (cero) y luego compara.
Algunas comparaciones:
  if (true==1)  //verdadero
  if (true===1)  //falso
  if (false==0)  //verdadero
  if (false===0)  //falso

Javascript Parte LXX

Todo formulario se le puede capturar el evento submit que se dispara previo a enviar los datos del formulario al servidor.
Uno de los usos más extendidos es la de validar los datos ingresados al formulario y abortar el envío de los mismos al servidos (con esto liberamos sobrecargas del servidor)
El evento submit se dispara cuando presionamos un botón de tipo type="submit".
Para probar el funcionamiento del evento submit implementaremos un formulario que solicita la carga de una clave y la repetición de la misma. Luego cuando se presione un botón de tipo "submit" verificaremos que las dos claves ingresadas sean iguales.
<!doctype html>
<html>
<head>
<title></title>

<script type="text/javascript">

    window.addEventListener('load', inicio, false);

    function inicio() {
        document.getElementById("formulario1").addEventListener('submit', validar, false);
    }

    function validar(evt) {
        var cla1 = document.getElementById("clave1").value;
        var cla2 = document.getElementById("clave2").value;
        if (cla1!=cla2) {
            alert('Las claves ingresadas son distintas');
            evt.preventDefault();
        }
    }

</script>

</head>
<body>

<form method="post" action="procesar.php" id="formulario1">
Ingrese clave:
<input type="password" id="clave1" name="clave1" size="20" required>
<br>
Repita clave:
<input type="password" id="clave2" name="clave2" size="20" required>
<br>
<input type="submit" id="confirmar" name="confirmar" value="Confirmar">
</form>

</body>
</html>
Tengamos en cuenta que la primer línea indica que se trata de una página de HTML5:
<!doctype html>
Definimos un formulario que solicita la carga de dos claves y un botón submit para enviar los datos al servidor:
<form method="post" action="procesar.php" id="formulario1">
Ingrese clave:
<input type="password" id="clave1" name="clave1" size="20" required>
<br>
Repita clave:
<input type="password" id="clave2" name="clave2" size="20" required>
<br>
<input type="submit" id="confirmar" name="confirmar" value="Confirmar">
</form>
Registramos el evento load de la página indicando que se ejecute la función inicio donde registramos el evento submit del formulario:
    window.addEventListener('load', inicio, false);

    function inicio() {
        document.getElementById("formulario1").addEventListener('submit', validar, false);
    }
La función validar extrae los contenidos de los dos "password" y verificamos si tienen string distintos en cuyo caso llamando al método preventDefault del objeto que llega como parámetro lo cual previene que los datos se envíen al servidor:
    function validar(evt) {
        var cla1 = document.getElementById("clave1").value;
        var cla2 = document.getElementById("clave2").value;
        if (cla1!=cla2) {
            alert('Las claves ingresadas son distintas');
            evt.preventDefault();
        }
    }

Javascript Parte LXIX

Hasta ahora siempre hemos asociado una función distinta para procesar los eventos de distintos elementos HTML. Pero veremos que está permitido asociar una único función a varios eventos de distintos objetos.
Debemos definir un parámetro en la función a implementar que llega la referencia del objeto que emitió el evento.
Implementaremos un panel con un conjunto de botones que nos permitan ingresar un valor numérico presionando botones.
Asociaremos el click de cada botón con una única función.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>


<script type="text/javascript">

    window.addEventListener('load', inicio, false);

    function inicio() {
        for (var x = 0; x <= 9; x++) {
            document.getElementById('boton' + x).addEventListener('click', presion, false);
        }
    }

    function presion(evt) {
        document.getElementById('resultado').innerHTML =
            document.getElementById('resultado').innerHTML + evt.target.value;
    }

</script>

<style>
  .boton{
    width:50px;
    height:50px;
  }
  #resultado {
    font-size:40px;
  }
</style>

</head>
<body>


<input type="button" id="boton0" name="boton0" value="0" class="boton">
<input type="button" id="boton1" name="boton1" value="1" class="boton">
<input type="button" id="boton2" name="boton2" value="2" class="boton">
<input type="button" id="boton3" name="boton3" value="3" class="boton">
<input type="button" id="boton4" name="boton4" value="4" class="boton">
<input type="button" id="boton5" name="boton5" value="5" class="boton">
<input type="button" id="boton6" name="boton6" value="6" class="boton">
<input type="button" id="boton7" name="boton7" value="7" class="boton">
<input type="button" id="boton8" name="boton8" value="8" class="boton">
<input type="button" id="boton9" name="boton9" value="9" class="boton">
<br>
<div id="resultado"></div>

</body>
</html>

En el body definimos 10 botones y un div donde mostraremos todos los números ingresados.
<input type="button" id="boton0" name="boton0" value="0" class="boton">
<input type="button" id="boton1" name="boton1" value="1" class="boton">
<input type="button" id="boton2" name="boton2" value="2" class="boton">
<input type="button" id="boton3" name="boton3" value="3" class="boton">
<input type="button" id="boton4" name="boton4" value="4" class="boton">
<input type="button" id="boton5" name="boton5" value="5" class="boton">
<input type="button" id="boton6" name="boton6" value="6" class="boton">
<input type="button" id="boton7" name="boton7" value="7" class="boton">
<input type="button" id="boton8" name="boton8" value="8" class="boton">
<input type="button" id="boton9" name="boton9" value="9" class="boton">
<br>
<div id="resultado"></div>
En el método inicio asociamos los diez botones con la función presion y para reducir el código disponemos un for que se repita 10 veces y llamamos en la misma al método addEventListener (debemos ir obteniendo el id del botón concatenando 'boton' y el contador del for):
    function inicio() {
        for (var x = 0; x <= 9; x++) {
            document.getElementById('boton' + x).addEventListener('click', presion, false);
        }
    }
Lo nuevo aparece en la función presion:
    function presion(evt) {
        document.getElementById('resultado').innerHTML =
            document.getElementById('resultado').innerHTML + evt.target.value;
    }
La función presion tiene un parámetro llamado evt (podemos darle cualquier nombre) y el mismo es un objeto que tiene las siguientes propiedades:
target: Referencia del objeto que generó el evento (en nuestro ejemplo alguno de los 10 botones)
type: El nombre del evento (en nuestro caso click)
button: El botón del mouse presionado (0 = izquierdo, 1 = medio, 2 = derecho)
keyCode: El caracter del teclado presionado (en caso que corresponda)
shiftKey: true o false en caso de estar presionada esta tecla.
Como en este problema debemos ir concatenando el número presionado procedemos a obtener la referencia del div y asignarle el valor actual más la propiedad value del botón presionado:
        document.getElementById('resultado').innerHTML =
            document.getElementById('resultado').innerHTML + evt.target.value;

Javascript Parte LXVIII

El evento focus se dispara cuando se activa el control o toma foco y el evento blur se dispara cuando pierde el foco el control. Podemos capturar el evento focus y blur de un control de tipo text, textarea, button, checkbox, file, password, radio, reset y submit.
Problema
Confeccionar un formulario que muestre dos controles de tipo text. El que está con foco mostrar su texto de color rojo y aquel que no está seleccionado el texto se debe mostrar de color negro.

<html>
<head>

<script type="text/javascript">

  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('text1').addEventListener('focus',tomarfoco1,false);
    document.getElementById('text2').addEventListener('focus',tomarfoco2,false);
    document.getElementById('text1').addEventListener('blur',perderfoco1,false);
    document.getElementById('text2').addEventListener('blur',perderfoco2,false);
  }

  function tomarfoco1()
  {
    document.getElementById('text1').style.color='#ff0000';
  }

  function tomarfoco2()
  {
    document.getElementById('text2').style.color='#ff0000';
  }

  function perderfoco1()
  {
    document.getElementById('text1').style.color='#000000';
  }

  function perderfoco2()
  {
    document.getElementById('text2').style.color='#000000';
  }

</script>

</head>
<body>

<input type="text" id="text1" name="text1" size="30">
<br>
<input type="text" id="text2" name="text2" size="30">

</body>
</html>
En la función inicio registramos los evento fucus y blur para los dos controles text:
  function inicio()
  {
    document.getElementById('text1').addEventListener('focus',tomarfoco1,false);
    document.getElementById('text2').addEventListener('focus',tomarfoco2,false);
    document.getElementById('text1').addEventListener('blur',perderfoco1,false);
    document.getElementById('text2').addEventListener('blur',perderfoco2,false);
  }
En los métodos tomarfoco1 y tomarfoco2 activamos el color rojo para el texto del control text:
  function tomarfoco1()
  {
    document.getElementById('text1').style.color='#ff0000';
  }

  function tomarfoco2()
  {
    document.getElementById('text2').style.color='#ff0000';
  }
En los métodos perderfoco1 y perderfoco2 procedemos a activar el color negro para los controles text:
  function perderfoco1()
  {
    document.getElementById('text1').style.color='#000000';
  }

  function perderfoco2()
  {
    document.getElementById('text2').style.color='#000000';
  }

Javascript Parte LXVII

El evento change se lo puede asociar a distintos elementos de formularios HTML y su comportamiento depende de cada uno.
Cuando asociamos el evento change a un control de tipo checkbox el mismo se dispara inmediatamente después que lo chequeamos o sacamos la selección. Para los controles de tipo radio también se dispara luego que cambia el estado de selección del mismo.
Para los controles select se dispara el evento change cuando cambiamos el item seleccionado.
Para los controles text y textarea se dispara cuando pierde el foco del control (porque seleccionamos otro control) y hemos cambiando el contenido del mismo.
Problema
Implementaremos una aplicación que muestre un alert cada vez que sucede el evento change para los controles checkbox, radio, select, text y textarea.
<html>
<head>

<script type="text/javascript">

  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('checkbox1').addEventListener('change',cambiocheckbox,false);
    document.getElementById('radioa').addEventListener('change',cambioradio,false);
    document.getElementById('radiob').addEventListener('change',cambioradio,false);
    document.getElementById('radioc').addEventListener('change',cambioradio,false);
    document.getElementById('select1').addEventListener('change',cambioselect,false);
    document.getElementById('text1').addEventListener('change',cambiotext,false);
    document.getElementById('textarea1').addEventListener('change',cambiotextarea,false);
  }

  function cambiocheckbox()
  {
   alert(document.getElementById('checkbox1').checked);
  }

  function cambioradio()
  {
    alert(document.getElementById('radioa').checked+' '+
          document.getElementById('radiob').checked+' '+
          document.getElementById('radioc').checked);
  }

  function cambioselect()
  {
    alert(document.getElementById('select1').value);
  }

  function cambiotext()
  {
    alert(document.getElementById('text1').value);
  }

  function cambiotextarea()
  {
    alert(document.getElementById('textarea1').value);
  }

</script>

</head>
<body>
Evento change del checkbox:
<input type="checkbox" id="checkbox1" name="checkbox1" checked>
<br>
Evento change del radio:<br>
<input type="radio" name="radio1" id="radioa"><br>
<input type="radio" name="radio1" id="radiob"><br>
<input type="radio" name="radio1" id="radioc"><br>
Evento change del select:
<select name="select1" id="select1">
  <option value="argentina">Argentina</option>
  <option value="chile">Chile</option>
  <option value="uruguay">Uruguay</option>
  <option value="paraguay">Paraguay</option>
  <option value="bolivia">Bolivia</option>
</select>
<br>
<input type="text" name="text1" id="text1">
<br>
<textarea name="text1" id="textarea1" rows="6" cols="80"></textarea>
<br>
</body>
</html>
Creamos una serie de controles de formulario HTML en el body de la página:
Evento change del checkbox:
<input type="checkbox" id="checkbox1" name="checkbox1" checked>
<br>
Evento change del radio:<br>
<input type="radio" name="radio1" id="radioa"><br>
<input type="radio" name="radio1" id="radiob"><br>
<input type="radio" name="radio1" id="radioc"><br>
Evento change del select:
<select name="select1" id="select1">
  <option value="argentina">Argentina</option>
  <option value="chile">Chile</option>
  <option value="uruguay">Uruguay</option>
  <option value="paraguay">Paraguay</option>
  <option value="bolivia">Bolivia</option>
</select>
<br>
<input type="text" name="text1" id="text1">
<br>
<textarea name="text1" id="textarea1" rows="6" cols="80"></textarea>
<br>
En la función inicio asociamos a todos los controles para el evento change un método:
  function inicio()
  {
    document.getElementById('checkbox1').addEventListener('change',cambiocheckbox,false);
    document.getElementById('radioa').addEventListener('change',cambioradio,false);
    document.getElementById('radiob').addEventListener('change',cambioradio,false);
    document.getElementById('radioc').addEventListener('change',cambioradio,false);
    document.getElementById('select1').addEventListener('change',cambioselect,false);
    document.getElementById('text1').addEventListener('change',cambiotext,false);
    document.getElementById('textarea1').addEventListener('change',cambiotextarea,false);
  }
La función cambiocheckbox se dispara cada vez que cambiamos el estado del checkbox (tanto cuando lo seleccionamos como cuando lo deseleccionamos):
  function cambiocheckbox()
  {
   alert(document.getElementById('checkbox1').checked);
  }
La función cambioradio se dispara cada vez que seleccionamos alguno de los tres radio:
  function cambioradio()
  {
    alert(document.getElementById('radioa').checked+' '+
          document.getElementById('radiob').checked+' '+
          document.getElementById('radioc').checked);
  }
La función cambioselect se dispara cuando cambiamos de item del control select:
  function cambioselect()
  {
    alert(document.getElementById('select1').value);
  }
La función cambiotext y cambiotextarea se ejecuta cuando perdemos el foco del control y hemos producido un cambio en su contenido (agregado o borrado caracteres de su interior):
  function cambiotext()
  {
    alert(document.getElementById('text1').value);
  }

  function cambiotextarea()
  {
    alert(document.getElementById('textarea1').value);
  }

domingo, 1 de octubre de 2017

Javascript Parte LXVI

El evento click se produce cuando el usuario hace un solo clic sobre el elemento HTML y suelta inmediatamente el botón del mouse en el mismo lugar y el dblclick cuando presiona en forma sucesiva en la misma ubicación.
Para probar como registramos estos eventos implementaremos una página que muestre dos div y definiremos el evento click para el primero y el evento dblclick para el segundo.




<html>
<head>

<script type="text/javascript">

  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('click',presion1,false);
    document.getElementById('recuadro2').addEventListener('dblclick',presion2,false);
  }

  function presion1()
  {
    alert('se hizo click');
  }

  function presion2()
  {
    alert('se hizo doble click');
  }

</script>

</head>
<body>

<div style="width:200px;height:200px;background:#ffff00" id="recuadro1">
Prueba del evento click
</div>
<div style="width:200px;height:200px;background:#ff5500" id="recuadro2">
Prueba del evento dblclick
</div>

</body>
</html>
Primero registramos mediante la llamada al método addEventListener el evento load de la página (recordemos que esta forma de registrar los eventos no funciona en el IE8 o anteriores, pero en muy poco tiempo la cantidad de dispositivos con dichos navegadores serán ínfimas), y dentro de la función inicio registramos los eventos click y dblclick para los dos div que definimos en la página HTML:
  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('click',presion1,false);
    document.getElementById('recuadro2').addEventListener('dblclick',presion2,false);
  }
Como vemos lo único que hacemos en los métodos que se disparan es mostrar un mensaje:
  function presion1()
  {
    alert('se hizo click');
  }

  function presion2()
  {
    alert('se hizo doble click');
  }

Javascript Parte LXV

El evento keydown se dispara cuando presionamos cualquier tecla del teclado, el evento keyup cuando soltamos una tecla. En cuanto el evento keypress en un principio procesa tanto cuando se la presionó y soltó, el único y gran inconveniente es que la mayoría de los navegadores no dispara el evento keypress para todas las teclas del teclado.
Para probar el evento keyup implementaremos un programa que permita solo ingresar 140 caracteres y nos informe con un mensaje la cantidad de caracteres disponibles para seguir escribiendo.
<html>
<head>

<script type="text/javascript">

  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('texto').addEventListener('keyup',presion,false);
  }

  function presion()
  {
    var canti=document.getElementById('texto').value.length;
    var disponibles=140-parseInt(canti);
    document.getElementById('cantidad').innerHTML=disponibles;
  }

</script>

</head>
<body>
<input type="text" id="texto" maxlength="140" size="140">
<br>
<p>Máxama cantidad de caracteres disponibles:<span id="cantidad">140</span></p>
</body>
</html>
Definimos un control text y lo limitamos a 140 como máximo:
<input type="text" id="texto" maxlength="140" size="140">
Disponemos un elemento span para mostrar la cantidad de caracteres como máximo a ingresar:
<p>Máxama cantidad de caracteres disponibles:<span id="cantidad">140</span></p>
Registramos el evento keyup para el control texto:
  function inicio()
  {
    document.getElementById('texto').addEventListener('keyup',presion,false);
  }

Cada vez que se suelta la tecla cuando estamos escribiendo en el control de texto procedemos a extraer el valor del control texto y obtener mediante la propiedad length la cantidad de caracteres tipeados hasta este momento y seguidamente restamos a 140 el número de caractes tipeados y procedemos a mostrarlo en el elemento spam:
  function presion()
  {
    var canti=document.getElementById('texto').value.length;
    var disponibles=140-parseInt(canti);
    document.getElementById('cantidad').innerHTML=disponibles;
  }

Javascript Parte LXIV

El evento mousemove se dispara cada vez que desplazamos la flecha del mouse sobre el elemento HTML que esta escuchando este evento.
Este tipo de evento hay que utilizarlo con cuidado ya que puede sobrecargar el navegador, ya que este evento se dispara cada vez que desplazamos aunque sea solo un pixel.
Implementaremos para ver su funcionamiento una página que muestre un div que capture el evento mousemove y como acción incrementaremos un contador para saber la cantidad de veces que se disparó el evento.

<html>
<head>

<script type="text/javascript">

  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('mousemove',mover,false);
  }

  function mover()
  {
    var x=parseInt(document.getElementById('cantidad').innerHTML);
    x++;
    document.getElementById('cantidad').innerHTML=x;
  }


</script>

</head>
<body>
<div style="width:200px;height:200px;background:#0000ff" id="recuadro1">
</div>
<p id="cantidad">0</p>

</body>
</html>
Disponemos un div y un párrafo donde mostramos el número 0:
<div style="width:200px;height:200px;background:#0000ff" id="recuadro1">
</div>
<p id="cantidad">0</p>
Capturamos el evento mousemove para el div:
  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('mousemove',mover,false);
  }
Cada vez que se emite el evento mousemove se llama el método mover donde extraemos el valor del párrafo, lo incrementamos en uno y lo volvemos a actualizar:
  function mover()
  {
    var x=parseInt(document.getElementById('cantidad').innerHTML);
    x++;
    document.getElementById('cantidad').innerHTML=x;
  }

Javascript Parte LXIII

El evento mouseover se dispara cuando ingresamos con la flecha del mouse a un control HTML que tiene registrado dicho evento, y mouseout se dispara cuando sacamos la flecha del mouse del control.
Es muy común utilizar estos dos eventos para producir cambios en el elemento HTML cuando ingresamos la flecha del mouse y retornar al estado anterior cuando se saca la flecha del mouse.
Es importante hacer notar que estos eventos se disparan sin tener que presionar la flecha del mouse, solo con desplazarla al interior del elemento HTML se dispara el evento mouseover.
Implementaremos un pequeño ejemplo que muestre un cuadrado, el mismo mostrará los bordes redondeados cuando ingresemos la flecha del mouse en su interior y volverá al estado anterior cuando retiremos la flecha.
<html>
<head>

<script type="text/javascript">

  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('mouseover',entrada,false);
    document.getElementById('recuadro1').addEventListener('mouseout',salida,false);
  }

  function entrada()
  {
    document.getElementById('recuadro1').style.borderRadius='30px';
  }

  function salida()
  {
    document.getElementById('recuadro1').style.borderRadius='0px';
  }

</script>

</head>
<body>
<div style="width:200px;height:200px;background:#0000ff" id="recuadro1">
</div>

</body>
</html>
Definimos en el HTML un div de color azul de 200 píxeles de lado:
<div style="width:200px;height:200px;background:#0000ff" id="recuadro1">
</div>
En la función inicio registramos los eventos mouseover y mouseout:
  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('mouseover',entrada,false);
    document.getElementById('recuadro1').addEventListener('mouseout',salida,false);
  }
El método entrada se ejecuta cuando ingresemos la flecha del mouse en el div llamado recuadro1 y procedemos en el mismo a modificar la propiedad borderRadius del estilo de este elemento (indicamos que el redondeo de los vértices del div sea de 30 píxeles):
  function entrada()
  {
    document.getElementById('recuadro1').style.borderRadius='30px';
  }
Cuando sale la flecha del mouse del div se ejecuta la función salida donde fijamos con 0 la propiedad borderRadius:
  function salida()
  {
    document.getElementById('recuadro1').style.borderRadius='0px';
  }

Javascript Parte LXII

Otros dos eventos relacionados con el mouse son mousedown y mouseup.
El evento mousedown se dispara inmediatamente luego que presionamos con la flecha del mouse un elemento HTML que tiene registrado dicho evento.
El evento mouseup se ejecuta luego de soltar el botón del mouse estando dentro del control HTML.
Para probar estos eventos implementaremos una página que contenga dos div, a un div le asignaremos el evento mousedown y al otro el evento mouseup. Cuando ocurra el evento procederemos a cambiar el texto contenido dentro del div.


<html>
<head>

<script type="text/javascript">

  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('mousedown',presion1,false);
    document.getElementById('recuadro2').addEventListener('mouseup',presion2,false);
  }

  function presion1()
  {
    document.getElementById('recuadro1').innerHTML='Se presione el mouse y todavía no se soltó';
  }

  function presion2()
  {
    document.getElementById('recuadro2').innerHTML='Se presione el mouse y se soltó';
  }

</script>

</head>
<body>
<p>Presione el recuadro amarillo sin soltar el botón del mouse.</p>
<div style="width:200px;height:200px;background:#ffff00" id="recuadro1">
</div>
<p>Presione el recuadro naranja y suelte el botón del mouse.</p>
<div style="width:200px;height:200px;background:#ff5500" id="recuadro2">
</div>

</body>
</html>
En la función inicio registramos los eventos mousedown y mouseup para los dos div, al div recuadro1 procedemos a registrar el evento mousedown y al div recuadro2 procedemos a registrar el evento mouseup:
  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('mousedown',presion1,false);
    document.getElementById('recuadro2').addEventListener('mouseup',presion2,false);
  }
El método que se dispara para el primer div procedemos a modificar todo el contenido del div accediendo a la propiedad innerHTML:
  function presion1()
  {
    document.getElementById('recuadro1').innerHTML='Se presione el mouse y todavía no se soltó';
  }
De forma similar codificamos la función que modifica el segundo div:
  function presion2()
  {
    document.getElementById('recuadro2').innerHTML='Se presione el mouse y se soltó';
  }