Jump to content
php.lv forumi
  • 0

Question

Posted (edited)

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

4 answers to this question

Recommended Posts

  • 0
Posted

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;

  • 0
Posted

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);
}

  • 0
Posted (edited)

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

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...