2017-02-15 7 views
2

Ich habe zwei versteckte Eingabefelder, die geändert werden, wenn es onchange Ereignis Dieser mit dynamischen Informationen über Last gefüllt istJavascript seltsam, wenn Ausgabe

<input type="hidden" id="setter" name="{{$value['name']}}" value="{{$field['values'][$value['name']]}}"> 

Dieser ist mit leeren Wert und Namen

<input type="hidden" id="old_setter" name="" value=""> 

das ist mein js Code

$('.select2').each(function(i, obj) { 
    if (!$(obj).data("select2")) { 
    $(obj).select2(); 
    } 
}).change(function() { 

    var oldSet = false; 
    var setter = $("#setter"); 
    var oldSetter = $("#old_setter"); 

    if (oldSet != true) { 

    oldSetter.val(''); 
    oldSetter.attr('name', setter.attr('name')); 
    setter.val(($(this).val())); 
    setter.attr('name', ($(this).attr('id'))); 
    oldSet = true; 

    } else { 

    setter.val(($(this).val())); 
    setter.attr('name', ($(this).attr('id'))); 
    oldSet = true; 

    } 
}); 

das Problem ist, wenn die versteckten Setter die Eingabe von Visib erhalten Le Setter ist in Ordnung, aber danach, wenn es ein anderes Onchange Event auf dem Hidden Setter gibt, wird es auch aktualisiert, aber ich möchte nur beim ersten Onchange Event updaten. Vielen Dank im Voraus

+1

'if (oldSet! = True)' wird immer falsch sein. Als 'var oldSet = false' läuft gerade davor. – evolutionxbox

Antwort

1

Sie haben die oldSet Variable außerhalb des Ereignisses (im globalen Bereich) zu definieren, sonst es zu false auf jeder zurückkehren wird sich ändern die gemacht Benutzer und der Zustand wird immer erreichbar:

var oldSet = false; 

$('.select2').each(function (i, obj) { 
    if (!$(obj).data("select2")) 
    { 
    $(obj).select2(); 
    } 
}).change(function() { 
    var setter = $("#setter"); 
    var oldSetter = $("#old_setter"); 

    if (oldSet != true) { 
    oldSetter.val(''); 
    oldSetter.attr('name', setter.attr('name')); 
    setter.val(($(this).val())); 
    setter.attr('name', ($(this).attr('id'))); 
    oldSet = true; 
    }else { 
    setter.val(($(this).val())); 
    setter.attr('name', ($(this).attr('id'))); 
    oldSet = true; 
    } 
}); 

Hoffe das hilft.

0

Setzen Sie den on change-Handler nach dem ersten Ereignis auf eine leere Funktion.

$('.select2').change(function(){}); 
+0

Ich werde Ihre Lösung nicht testen, weil @Acharki mir bereits die Lösung gegeben hat. Ich glaube nicht, dass Ihre Lösung mit dem Problem in irgendeiner Weise verbunden ist. P.S Danke für Ihre Zeit –