Dodawanie tekstu do textarea w miejscu kursora

0

Witam ponownie. Zastanawiam się jak dodać tekst do textarea w miejscu gdzie był kursor po naciśnięciu na . Dodanie na koniec czy początek ciągu to prostota ale tutaj nie mam pojęcia.

1

Wkleje ci fragment kodu, ktory jednoczesnie jest wtyczka do jQuery:

(function($)
{
	$.fn.extend(
	{
		insertAtCaret: function(openWith, closeWith, value)
		{
			/**
			 * @todo Musimy uzyc tej dziwnej instrukcji (pobierajac ID textarea poprzez document.getElementById)
			 * poniewaz nie dziala prawidlowo na firefox. Do poprawy!
			 */
			if (!this.attr('id'))
			{
				this.attr('id', 'textarea_content');
			}
			var element = document.getElementById(this.attr('id'));

			if (document.selection) 
			{
				element.focus();
				sel = document.selection.createRange();
				sel.text = openWith + (sel.text.length > 0 ? sel.text : value) + closeWith;

				element.focus();
			}
			else if (element.selectionStart || element.selectionStart == '0') 
			{
				var startPos = element.selectionStart;
				var endPos = element.selectionEnd;
				var scrollTop = element.scrollTop;

				if (startPos != endPos)
				{
					var value = openWith + element.value.substring(startPos, endPos) + closeWith;
				}
				else
				{
					var value = openWith + value + closeWith;
				}

				element.value = element.value.substring(0, startPos) + value + element.value.substring(endPos, element.value.length);

				element.focus();
				element.selectionStart = startPos + value.length;
				element.selectionEnd = startPos + value.length;
				element.scrollTop = scrollTop;
			}
			else 
			{
				element.value += (openWith + value + closeWith);
				element.focus();
			}
		}
	});
}
)(jQuery);

Majac taki fragment kodu mozesz zrobic:

$('#textarea').insertAtCaret("", '', "test");
0

Niestety kod nie działa. Początek moich kodów jQuery:

$(document).ready(function() { 
	(function($)
	{
		$.fn.extend(
		{
			insertAtCaret: function(openWith, closeWith, value)
			{
				if (!this.attr('id'))
				{
					this.attr('id', 'elm1');
				}
				var element = document.getElementById(this.attr('id'));
	
				if (document.selection) 
				{
					element.focus();
					sel = document.selection.createRange();
					sel.text = openWith + (sel.text.length > 0 ? sel.text : value) + closeWith;
	
					element.focus();
				}
				else if (element.selectionStart || element.selectionStart == '0') 
				{
					var startPos = element.selectionStart;
					var endPos = element.selectionEnd;
					var scrollTop = element.scrollTop;
	
					if (startPos != endPos)
					{
						var value = openWith + element.value.substring(startPos, endPos) + closeWith;
					}
					else
					{
						var value = openWith + value + closeWith;
					}
	
					element.value = element.value.substring(0, startPos) + value + element.value.substring(endPos, element.value.length);
	
					element.focus();
					element.selectionStart = startPos + value.length;
					element.selectionEnd = startPos + value.length;
					element.scrollTop = scrollTop;
				}
				else 
				{
					element.value += (openWith + value + closeWith);
					element.focus();
				}
			}
		});
	}
	)(jQuery);

inne,,,,,,,,,,,,,,,,,,,,,,


$('span[id="dodajplikdowpisu"]').click(function(){
		$('#elm1').insertAtCaret("", '', "test");
	});

HTML:

<textarea id="elm1" name="elm1" rows="15" style="width: 100%" class="tinymce">
 <p>fhjdlhkfkgkh gfrseytgfcvvck hdertggj</p>
</textarea>

<span id="dodajplikdowpisu" class="button">Dodaj tresc do wpisu</span>

Wywołanie zdarzenia działa, testowane ale tekst się nie dodaje do wpisu.

0

Ten moj kod jest z tej wtyczki: http://redmine.boduch.net/projects/coyote-cmf/repository/show/trunk/template/js/wikieditor
Tam to dziala wiec musisz sobie potestowac :)

0

Może przez to że używam tinyMCE?

0

Na pewno. Poczytaj dokumentacje, czy tinyMCE nie udostepnia interfejsu umozliwiajacego takie dzialanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1