2010-04-09 7 views

Respuesta

18

En realidad, puede pasar una función para recortar la cadena que va a editar. Utilizar esto en su configuración:

data : function(string) {return $.trim(string)}, 
submit: "Save" 
+0

Impresionante. Esto es realmente útil. – Jake

+1

En serio. Agregué esto a mi objeto base con el que construí todos mis objetos jeditables, y ahora puedo formatear mi página como quiera. Realmente útil ... – Jake

+0

¡Esta es realmente una gran respuesta! Gracias. –

1

Hmm, eso es extraño. No estoy teniendo ese problema con Jeditable.

Bueno, jQuery tiene una función de ajuste:

$.trim(" hello, how are you? "); 
12

encontrado la razón. ¡Y es una locura!

En lugar de edición se inserte el espacio alrededor del texto si html se ve como después de

<div id="inplace_edit_this"> 
    This is some text that will be edited in-place. 
</div> 

Y lo hará NO espacio de inserción en todo el texto si su html tiene este aspecto

<div id="inplace_edit_this">This is some text that will be edited in-place.</div> 

Me pregunto qué causa esto. Esto es probablemente debido a la diferencia en las formas en que el navegador y Javascript interpretan el HTML.

+2

... no causa raíz fijo de emisión, la propuesta de Symmitchry fija así – dmytrivv

+1

... pero esto _es_ la respuesta si no lo hará, o no puede, cambiar jEditable.js – w4ik

+0

Estoy de acuerdo con dmytrivv. La pregunta nunca especificó que jEditable no se puede cambiar. Intenté la solución anterior, y todavía tengo un espacio al principio. Las soluciones de Johan Bjorling y Symmitchry funcionan todo el tiempo. – ksindi

8

Esto podría ser una noticia antigua, pero me enfrenté a un problema similar: todavía no sé por qué, pero después de guardar un texto editado, la siguiente vez que hice clic en él, 11 espacios (cada vez) insertado antes del texto editable.

Después de mucho ensayo y error, finalmente resuelto este problema mediante la edición de la línea de ~ 239 en el archivo jeditable.js:

content.apply(form, [input_content, settings, self]); 

y lo reemplazó con:

content.apply(form, [$.trim(input_content), settings, self]); 

(Per sugerencia de Baloneysammitch)

Ten en cuenta que no tengo ni idea de lo que estoy haciendo, pero parece que funcionó. Tal vez alguien con más habilidad que yo podría explicar de dónde podrían venir esos 11 espacios extra ...

+0

¡Gracias, esto me solucionó el mismo problema! En caso de que usted (o cualquier otra persona) se encuentre con este mismo problema con el texto de edición previa que se encuentra en self.revert, hice el mismo cambio en la línea 260 más o menos, $ .trim() ing el valor que self.revert es establecido en, y que solucionó mi problema de espacio en blanco de valor original. – Aaron

+1

Realmente debería usar el método de Greg DeVore: http://stackoverflow.com/a/9087222/76672 Sin actualizar el archivo core jeditable. – Jake

1

Ha pasado un tiempo desde que alguien respondió a esta publicación, pero me encontré con el mismo problema y pensé en agregar mis dos centavos vale la pena. Este problema solo ocurrió para mí en Firefox y Safari. IE y Chrome no parecen tener este problema.

Probé la sugerencia de Symmitchry del $.trim() en la línea 239 y esto no funcionó para mí. Así que hice una vuelta hacia atrás y la cuenta de que el problema está apareciendo por primera vez alrededor de la línea 176 con la línea:

self.revert = $(self).html();

Dado que esta es una llamada jQuery, que me hace pensar que hay un problema con la forma en jQuery es interactuando con los navegadores mencionados anteriormente. No estoy seguro ...

Encontré que al agregar un $.trim() en este punto las cosas funcionaron como esperaba.

Encontré que Chirantan hizo que la forma en que se presentaba el htm hiciera una diferencia en si los espacios estaban allí o no.

3

He solucionado este problema con JEditable 1.7.1 en mi aplicación.La solución es prácticamente idéntica a la de Symmitchry.

A partir de la fila 204 hay un bloque de código que determina cómo JEditable debe cargar sus datos.

/* set input content via POST, GET, given data or existing value */ 
var input_content; 

if (settings.loadurl) { 
    ... 
} else if (settings.data) { 
    ... 
} else { 
    ... 
} 
content.apply(form, [input_content, settings, self]); 

Añadir jQuery ajuste del funcionamiento antes de la última fila (fila 239 en mi versión)) por lo que se obtiene:

/* set input content via POST, GET, given data or existing value */ 
var input_content; 

if (settings.loadurl) { 
    ... 
} else if (settings.data) { 
    ... 
} else { 
    ... 
} 

try { 
    input_content = input_content.trim(); 
} 
catch(e) { 
    // DO NOTHING 
} 

content.apply(form, [input_content, settings, self]); 

La razón por la que lo puse en un try-catch es porque cuando se usa JEditable con textarea o entrada de tipo texto input_content es básicamente una cadena. Cuando usa un contenido de entrada de selección, es un objeto y no responderá bien al recorte.

Probablemente haya una forma más hermosa de hacer esto, en lugar de usar un try-catch, pero hace el trabajo bien.

0

Esto sucede si el formato ha adjudicar los espacios. jEditable lo trata con respeto y no modifica su contenido ... por ejemplo, en el formato automático VS IDE se crean enormes lagunas en las que el renderizado de HTML está bien.

SI usando jQuery simplemente recortar el DOM antes de llamar jEditable si desea ot asegurarse de que la hay espacios en blanco en cualquier lugar

$('#BatchTable tbody td').each(function() { 
     $(this).html($.trim($(this).html())); 
}); 

oTable = $('#BatchTable').dataTable({ 
     "bJQueryUI": true 
}); 
0

En mi caso, la solución fue eliminar la </input> en la línea 390 en el archivo jQuery. jeditable.js. línea antes: var input = $('<input type="hidden"></input>'); línea que funciona para mí: var input = $('<input type="hidden">');

Cuestiones relacionadas