2017-05-26 17 views
0

Ich habe eine Liste, in die ich eine neue Zeile eingefügt habe. Ich möchte alle Folgenummern danach um eins erhöhen.Eine Zahl um 1 erhöhen, wenn sie größer ist als ein Wert

<div class="modal" id="insertroom" style="display: none;"> 
    <button class="dismiss right button"><i class="fa fa-close"></i></button> 
    <h3>Insert a room in the route</h3> 
    <p><span class="fixed-width">Room name:</span> 
     <input name="room_id" id="room_id"/> 
      </p> 
     <p><span class="fixed-width">Sequence number in the route:</span> <input type="number" id="newsequencenumber" name="sequence" value=""></p> 
    <p><span class="fixed-width">Route name:</span> 
     <input name="route_number" id="route_number"/> 
      </p> 
    <p><input type="button" class="button" id="insertdetails" name="insertdetails" value="Insert details"></p> 
</div> 

    <ul class="ui-listview"> 
     <li><span class="half-fixed-width">AB101B</span> 
    Sequence: 
     <input type="number" class="sequence" name="sequence" value="1"> 
     <a class="button inserthere" title="insert room here" href="#" rel="1"> 
      <i class="fa fa-plus-square"></i> 
     </a> 
     </li> 

Ich schrieb den Code unten, aber es scheint den if(new_sequence_number > thisval) Teil ignoriert werden, da es um 1 alle Zahlen erhöht, anstatt nur diejenigen mit einem Wert größer als die Sequenznummer der eingefügten Zeile.

$('#insertdetails').on('click', function() { 
    /*get values input into modal */ 
    var new_sequence_number = $('#insertroom #newsequencenumber').val(); 
    var new_room_id = $('#insertroom #room_id').val(); 
    var new_route_id = $('#insertroom #route_number').val(); 
    /*put those values into the new row */ 
    $('#new_room_id' + new_sequence_number).val(new_room_id); 
    $('#new_route_id' + new_sequence_number).val(new_route_id); 
    $('#insertroom').hide(); 
    $('.overlay').hide(); 

    $('.sequence').filter(function(new_sequence_number) { 
    var thisval = parseInt($(this).val()); 
    var plusone = thisval + 1; 
    if(thisval > new_sequence_number) { 
     $(this).val(plusone); 
    } 
    }); 
}); 
+0

Ich habe alle Fragen mit einem ähnlichen Titel, aber keiner von ihnen mein Problem gelöst –

+3

Der Parameter, den Sie genannt haben 'new_sequence_number' der Index des Elements in dem Satz sein wird - ist es das, was Sie erwarten soll es sein? Es kann hilfreich sein, ein funktionierendes Snippet zu sehen, wenn Sie eines einrichten könnten - oder zumindest das zugehörige HTML. –

+1

Wenn Ihre Erklärung richtig ist, haben Sie die falsche IF-Klausel. Es sollte 'thisval> new_sequence_number' sein. Sie haben gesagt, wenn der Wert größer als die Sequenznummer ist. – yomisimie

Antwort

1

Die new_sequence_number in dem Funktionsparameter ist eine neue Variable und nicht über sie auf den ‚new_sequence_number‘ erklärt beziehen. Der Parameter kann weggelassen werden, um die äußere Variable zu verwenden.

$('.sequence').each(function() { 
    // .. 
    if(thisval >= new_sequence_number) { 
    //.... 

rein, weil die Antwort scheint in sich selbst so kurz, unten ist eine Alternative: D

val() eine Funktion als Argument nehmen, in dem der Wert manipuliert werden kann. Der Nachteil dieser Methode ist, dass alle Eingaben gesetzt werden, auch wenn sie gleich bleiben. Der Vorteil ist, dass die gesamte Logik in einem kurzen und einzigen Funktionsaufruf ist.

$('.sequence').val(function(ind,v) {  
    return (v = +v) < new_sequence_number ? v : ++v; 
    }); 
+0

danke. Ich benutzte das erste und es funktioniert perfekt –

Verwandte Themen