Foros del Web » Programando para Internet » Jquery »

Problemas con jquery y ajax

Estas en el tema de Problemas con jquery y ajax en el foro de Jquery en Foros del Web. Buenas, Estoy empezando a utilizar jquery y ajax, y estoy desbordado. Lo que intento hacer es crear un campo select con algo de diseño que ...
  #1 (permalink)  
Antiguo 26/07/2011, 11:56
 
Fecha de Ingreso: abril-2005
Mensajes: 22
Antigüedad: 19 años, 8 meses
Puntos: 0
Problemas con jquery y ajax

Buenas,

Estoy empezando a utilizar jquery y ajax, y estoy desbordado.

Lo que intento hacer es crear un campo select con algo de diseño que no sea el que viene por defecto, y que una vez cambiamos la selección del mismo, me cargue la información de otro div, en ese sitio la idea es hacer una select u otra con el valor pasado (pero de momento no he llegado a eso ni de lejos).

Siguiendo tutoriales y demás, he conseguido dar imagen al combo con el plugin js/jquery.scrollablecombo.js.
Y por otro lado, igualmente dándome de cabezazos, he conseguido hacer el ajax que de momento sólo cambia el texto que hay dentro del div, cada vez que se cambia el valor de un select.

Pero ahora el problema, se me plantea al juntar ambas cosas.
Sí en el botón del select, pongo el id (necesario para el jquery), entonces no me hace caso del onchange, y sí dejo el onchange y quito el id, sí hace el ajax, pero no tengo el diseño.

<select name="ui_element" id="ui_element" onchange="traerDatos('ip')">

Imagino que será, porque es como sí estuviera llamando a dos códigos javascript ¿?, puede ser eso ¿?, alguna solución ¿?, puedo hacer algo para llamar a los dos ¿?

Muchas gracias
  #2 (permalink)  
Antiguo 26/07/2011, 17:29
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 9 meses
Puntos: 192
Respuesta: Problemas con jquery y ajax

El problema es que el script que utilizás reemplaza el <select> por un <ul>, entonces el evento onchange nunca se dispara. Me tomé el trabajo de estudiarlo levemente para ver cómo se comportaba y esto parece funcionar:

Código Javascript:
Ver original
  1. $(function() {
  2.     $('#ui_element').scrollablecombo();
  3.     $('.cb_selectWrapper').click(function(){
  4.         var valor_seleccionado = $(this).find('.selected a').attr('href');
  5.         alert(valor_seleccionado);
  6.     });
  7. });
__________________
nahueljose.com.ar
  #3 (permalink)  
Antiguo 27/07/2011, 01:38
 
Fecha de Ingreso: abril-2005
Mensajes: 22
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta: Problemas con jquery y ajax

Muchísimas gracias,

De momento ya me has desatascado un montón (estaba perdidísimo - bueno seguramente lo siga estando pero al menos puedo continuar), a ver sí ahora consigo coger el atributo del value del selected en lugar del href, y sino al menos podré cortar el http://www., y quedarme con el value, que es lo que necesito para pasar el parámetro al php.

Gracias,
Pedro
  #4 (permalink)  
Antiguo 27/07/2011, 05:44
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 9 meses
Puntos: 192
Respuesta: Problemas con jquery y ajax

Es que me parece que no me has entendido :P

Verás, si uno tiene un enmarcado así para un select:

Código HTML:
Ver original
  1.     <option value="A">Option Item A</option>
  2.     <option value="B">Option Item B</option>
  3.     <option value="C">Option Item C</option>

Al aplicarle el plugin, se convierte en esto:

Código HTML:
Ver original
  1. <div class="cb_select">
  2.   <div class="cb_selectWrapper" style="overflow-x: hidden; overflow-y: hidden; z-index: 1000; display: none;">
  3.     <ul>
  4.       <li class="" style="">
  5.         <a href="A">Option Item A</a>
  6.       </li>
  7.       <li class="selected" style="display: none;">
  8.         <a href="B">Option Item B</a>
  9.       </li>
  10.       <li class="" style="display: list-item;">
  11.         <a href="C">Option Item C</a>
  12.       </li>
  13.     </ul>
  14.   </div>
  15.   <div class="cb_selectMain cb_down">
  16.     Option Item A
  17.   </div>
  18. </div>

Entonces, observá que el valor de "value" de cada <option> es puesto en el "href" de cada <a>. No es algo muy bueno, pero así es como funciona. De todas formas, al depender de AJAX no creo que sea grave que lo hagas así pues de todas formas estás dependiendo de JavaScript para el funcionamiento de tu sitio.

-edit-

A menos que sea yo el que esté perdido! :P ¿Podrías indicarme bien qué plugin estás usando? ¿o al menos cómo es el enmarcado que te genera? Podés verlo con un inspector de elementos como el de Google Chrome.
__________________
nahueljose.com.ar
  #5 (permalink)  
Antiguo 27/07/2011, 11:27
 
Fecha de Ingreso: abril-2005
Mensajes: 22
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta: Problemas con jquery y ajax

Buenas,

El plugin que utilizo es este que he visto en esta página http://www.mastercafe.com/ejemplos/ScrollableCombo/


Lo había entendido más o menos, pero desconocía los atributos que tenía el <ul>, pero viendo que el href, coge el value del select, me puede servir, pues lo que quiero es cargar un div con ajax, en función de ese valor que lleve la select.

Lo que me resulta curioso, es que en explorer aparte de el valor, antepone el http://www.pagina.com/(valor del select), sin embargo en google Chrome, sólo pone el valor del select.
Sólo se me ocurre, coger truncar por la derecha en cuanto encuentre el caracter /, para así quedarme en ambos casos con el valor que necesito.

Muchas gracias,
  #6 (permalink)  
Antiguo 28/07/2011, 03:14
 
Fecha de Ingreso: abril-2005
Mensajes: 22
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta: Problemas con jquery y ajax

Buenas,

De momento ya me ha servido, para el explorer elimino toda la ruta http://www, y me quedo sólo con el valor que necesito.

Muchas gracias.
  #7 (permalink)  
Antiguo 27/04/2012, 00:37
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años, 7 meses
Puntos: 2
Respuesta: Problemas con jquery y ajax

Buenas. Resulta que puse este plugin "scrollablecombo" de jquery en mi formulario pero no funciona para enviarlo con PHP por email. Hasta acá llega mis conocimientos... si me pueden ayudar se los agradecería muchísimo...
(intenté poniendole al select el "name" para envialo por POST: tampoco)


Aquí van los códigos:

HTML:

<select id="ui_element">
<option value="Elige Provincia" selected>Elije Provincia</option>
<option value="Buenos Aires">Buenos Aires</option>
<option value="Catamarca">Catamarca</option>
<option value="Chaco">Chaco</option>
<option value="Chubut">Chubut</option>
<option value="Córdoba">Córdoba</option>
<option value="Corrientes">Corrientes</option>
<option value="Entre Rios">Entre Rios</option>
<option value="Formosa">Formosa</option>
<option value="Jujuy">Jujuy</option>
<option value="La Pampa">La Pampa</option>
<option value="La Rioja">La Rioja</option>
<option value="Mendoza">Mendoza</option>
<option value="Misiones">Misiones</option>
<option value="Neuquén">Neuquén</option>
<option value="Río Negro">Rio Negro</option>
<option value="Salta">Salta</option>
<option value="San Juan">San Juan</option>
<option value="San Luis">San Luis</option>
<option value="Santa Cruz">Santa Cruz</option>
<option value="Santa Fe">Santa Fe</option>
<option value="Sgo. del Estero">Sgo. del Estero</option>
<option value="Tierra del Fuego">Tierra del Fuego</option>
<option value="Tucumán">Tucumán</option>
</select>

CSS:

.cb_select{
width:200px;
font-family: Tahoma, Geneva, sans-serif;
font-size:15px;
}
.cb_select .cb_selectMain{
color: #000;
border:2px solid #ddd;
background-color:#f0f0f0;
background-repeat:no-repeat;
background-position:95% 50%;
cursor:pointer;
padding-left:5px;
height:23px;
line-height:22px;
width:130px;
position:absolute;
top:190px;
left:155px;
z-index:10;
text-shadow:1px 1px 1px #fff;
-moz-box-shadow:0 0 2px #333 inset;
-webkit-box-shadow:0 0 2px #333 inset;
box-shadow:0 0 2px #333 inset;
}
.cb_selectWrapper{
text-align:left;
width:150px;
display:none;
position:absolute;
top:0px;
left:0px;
z-index:1000;
height:150px;
border:2px solid #ddd;
background-color:#fff;
margin:216px 147px ;
background:#f0f0f0 url(overlay.png) repeat-x top left;
-moz-box-shadow:0px 0px 2px #333 inset;
-webkit-box-shadow:0px 0px 2px #333 inset;
box-shadow:0px 0px 2px #333 inset;
}
.cb_selectWrapper ul li a{
cursor:pointer;
display:block;
padding:0 80px;
color: #999;
font-size:16px;
height:17px;
}
.cb_selectWrapper ul li a:hover{
background-color:#616161;
color:#fff;
text-shadow:1px 1px 1px #000;
}

Js:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>// La galería jquery

Este es el código que estoy utilizando:

$(function() {
$('#ui_element').scrollablecombo();
});


//y este es el resto:

(function($) {
$.fn.scrollablecombo = function(options) {
var opts = $.extend({}, $.fn.scrollablecombo.defaults, options);
return this.each(function() {
$this = $(this);
var o = $.meta ? $.extend({}, opts, $this.data()) : opts;

function findHighestZIndex(){
var divs = document.getElementsByTagName('div');
var highest = 0;
for (var i = 0; i < divs .length; i++)
{
var zindex = divs[i].style.zIndex;
if (zindex > highest) {
highest = zindex;
}
}
return highest;
}

/**
* hide the select element
* graceful degradation
*/
$this.hide();

function makeScrollable($wrapper, $container){
var extra = 50;
var wrapperHeight = $wrapper.height() ;
$wrapper.css({overflow: 'hidden'});
$wrapper.scrollTop(0);
$wrapper.unbind('mousemove').bind('mousemove',func tion(e){
var ulHeight = $container.outerHeight() + 2*extra ;
var top = (e.pageY - $wrapper.offset().top) * (ulHeight-wrapperHeight ) / wrapperHeight - extra;
$wrapper.scrollTop(top);
});
}

/**
* let's build our element structure
*/
var $ul_e = $('<ul />');

$this.find('option').each(function(){
var $option = $(this);
var liclass = '';
if($option.attr('selected'))
liclass = 'selected';
var $li_e = $('<li />',{
className : liclass,
html : '<a href="'+$option.val()+'">'+$option.html()+'</a>'
});
$ul_e.append($li_e);
});

var $wrapper_e = $('<div />',{
className : 'cb_selectWrapper'
});

$wrapper_e.append($ul_e);

var $control_e = $('<div />',{
//id : 'ui_element',
className : 'cb_selectMain cb_down'
});

var $select_e = $('<div />',{
className : 'cb_select'
});

$select_e.append($wrapper_e).append($control_e);

var $selected = $ul_e.find('.selected');


function openCombo(){
var maxzidx = Math.max(findHighestZIndex(),99999);
$wrapper_e.css('z-index',parseInt(maxzidx+1000)).show();
$control_e.addClass('cb_up').removeClass('cb_down' );
makeScrollable($wrapper_e,$ul_e);
}
function closeCombo(){
$wrapper_e.css('z-index',1000).hide();
$control_e.addClass('cb_down').removeClass('cb_up' );
}
$control_e.html($selected.find('a').html())
.bind('click',function(){
(!$wrapper_e.is(':visible'))? openCombo() : closeCombo();
}
);
$selected.hide();

$this.parent().append($select_e);
$this.remove();

$ul_e.find('a').bind('click',function(e){
var $this = $(this);
$control_e.html($this.html());
var $selected = $ul_e.find('.selected');
$selected.show().removeClass('selected');
$this.parent().addClass('selected').hide();
closeCombo();
e.preventDefault();
});



});
};
$.fn.scrollablecombo.defaults = {

};
})(jQuery);


PHP:


$mensaje="";
$mensaje.="Provincia: ".$_POST['provincia']."\n";
$email_destiny="[email protected]";

$subject="este es el asunto";

if (mail($email_destiny,$subject,$mensaje,"De: minombre<".$_POST['femail'].">")) {
echo '<p align="center">Gracias por su pedido. <br>Le enviaremos un email a su casilla<br/> para concluir la operación</br><br><br><strong>Biofusionart</strong>';
} else {
echo '<p align="center">Error '.$_POST['fname'].'</p>';
}



Les pido ayuda por favor.

mikepianist.

Etiquetas: ajax, javascript, js
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:19.