Jump to content
php.lv forumi
  • 0

Select klonēšana


Maris-S

Question

Mēģinu klonēt objektus ar cloneNode funkcijas palīdzību. Nostrādā viss kā arī vajadzētu, bet objektam select netiek saglabāta aktīvā vērtība, input (text) laukiem value vērtība saglabājās. Vai var panākt, vai arī varbūt ir kāda analoga funkcija, kas saglabātu arī select aktīvo vērtību pēc klonēšanas?

Edited by Maris-S
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Iespējams tā ir cloneNode "fīča", nezinu. Tas notiek uz visiem browseriem, vai tikai dažiem īpašajiem (IE6?)

Pamēģini varen nesmuku variantu, moš strādās:

var clonedNode = original.cloneNode(true);
clonedNode.innerHTML = original.innerHTML;

Link to comment
Share on other sites

  • 0

Diemžēl ar innerHTML arī nesanāk, nācās tomēr manuāli piešķirt selectam aktīvo opciju kā rādīja Indoom. Problēmu sarežģīja tas, ka klonējās tabulas rinda kurā ir vairāki selecti un vairāki input lauki (input jāpeliek tukšiem). Galā sanāca mazliet garāks js nekā gribējās:

 

function cancelEvents(e) {
if (!e)
	e = window.event;

e.cancelBubble = true;
if (e.stopPropagation)
	e.stopPropagation();
}

function clone(element, e) {
var dub = element.cloneNode(true);
if (!e)
	var e = window.event;
element['on'+e.type]=null;
element.parentNode.appendChild(dub);
cancelEvents(e);
return dub;
}

function cloneRow(element, e) {
newRow=clone(element, e);

var previousSelects=element.getElementsByTagName('select');
var newSelects=newRow.getElementsByTagName('select');
for (var i=0; i<previousSelects.length; i++)
	if (previousSelects[i].name==newSelects[i].name)
		newSelects[i].options[previousSelects[i].selectedIndex].selected=true;

var newInputs=newRow.getElementsByTagName('input');
for (var i=0; i<newInputs.length; i++)
	newInputs[i].value='';

cancelEvents(e);
}

Link to comment
Share on other sites

  • 0

Ja gribi īsāk, jāizmanto, piem., jquery.

function cloneRow(element, e){
var newrow = $(element).clone(true).appendTo($(element).parent());
$('input[type="text"]',newrow).val('');
var newrowselects = $('select',newrow);
$('select',element).each(function(i){ newrowselects.eq(i).val($(this).val()); });
cancelEvents(e);
}

Edited by indoom
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...