2017-02-16 10 views
0

Ich habe ein paar Checkboxen, die beim Klicken auf einen Textbereich ausgegeben werden. Dieses Bit funktioniert, aber nachdem jedes Ergebnis aufgelistet wird, gibt es ein Komma, von dem ich nicht weiß, wie es entfernt wird. Außerdem möchte ich das Textfeld mit etwas Text laden und die Ergebnisse darunter anzeigen lassen, ohne meinen vorgeladenen Text zu überschreiben. Bisher habe ich dieseDaten an Textbereich anhängen

function updateTextArea() { 
 
    var allVals = []; 
 
    $('.taglist :checked').each(function(i) { 
 

 
    allVals.push((i != 0 ? "\r\n" : "") + $(this).val()); 
 
    }); 
 
    $('#form1').val(allVals).attr('rows', allVals.length); 
 

 
} 
 
$(function() { 
 
    $('.taglist input').click(updateTextArea); 
 
    updateTextArea(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea class="textfield" id="form1" name="form1">My text here</textarea> 
 
<div class="taglist"> 
 
    <label><input type="checkbox" value="Value 1">Value 1</label> 
 
    <label><input type="checkbox" value="Value 2">Value 2</label> 
 
    <label><input type="checkbox" value="Value 3">Value 3</label> 
 
    <label><input type="checkbox" value="Value 4">Value 4</label> 
 
    <label><input type="checkbox" value="Value 5">Value 5</label> 
 
</div>

Antwort

2

Wenn Sie ein Array als Argument von val() festlegen, wird es implizit in eine durch Kommas getrennte Zeichenfolge konvertiert.Sie können das Array entweder mit allVals.join() verbinden oder, wenn Sie die Werte in Array-Form überhaupt nicht benötigen, können Sie sie direkt als String verketten.

Ich habe auch Ihre Anfrage implementiert, um den Anfangswert im folgenden Snippet zu behalten, indem Sie es mit speichern. (Sie werden wahrscheinlich die Prüfung für das Weglassen der ersten Zeilenumbruch --edit überspringen wollen: Ich habe eine dynamische Überprüfung implementiert, um zu sehen, ob die anfängliche TextArea- Wert leer ist)

function updateTextArea() { 
 
    var allVals = $('#form1').data('initialVal'), 
 
     lineCount = 1; 
 
    $('.taglist :checked').each(function(i) { 
 
    allVals+= (i != 0 || allVals.length > 0 ? "\r\n" : "") + $(this).val(); 
 
    lineCount++; 
 
    }); 
 
    $('#form1').val(allVals).attr('rows', lineCount); 
 

 
} 
 
$(function() { 
 
    $('.taglist input').click(updateTextArea); 
 
    
 
    $('#form1').data('initialVal', $('#form1').val()); 
 
    updateTextArea(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea class="textfield" id="form1" name="form1">My text here</textarea> 
 
<div class="taglist"> 
 
    <label><input type="checkbox" value="Value 1">Value 1</label> 
 
    <label><input type="checkbox" value="Value 2">Value 2</label> 
 
    <label><input type="checkbox" value="Value 3">Value 3</label> 
 
    <label><input type="checkbox" value="Value 4">Value 4</label> 
 
    <label><input type="checkbox" value="Value 5">Value 5</label> 
 
</div>

+0

@ Connum Das ist perfekt! Vielen Dank an alle die geholfen haben. – Greg

+0

@Connum Ihr Schnipsel funktioniert nicht, öffnen Sie das Schnipsel und prüfen Sie "Wert 1", es entfernt einfach den Zeilenumbruch, aber fügt dem Textbereich nicht "Wert 1" hinzu. Deaktivieren Sie "Wert 1" und überprüfen Sie "Wert 2" das gleiche Problem. - Wenn man "Wert 1" zuerst nach dem Öffnen des Snippets und dann "Wert 2" überprüft, zeigt es "Wert 1", aber nicht "Wert 2", was mit der Anzahl der Zeilen wahrscheinlich falsch ist, da die Werte scheinbar nicht addiert werden Ändere die Größe der Textfläche korrekt. – Nope

+0

Es funktioniert perfekt für mich. Welchen Browser benutzen Sie? – Connum

2

Warum Sie Kommas haben?

Weil Sie implizit Anruf ein toString() auf Ihrem Array, die durch Komma Ihrer Array-Elemente getrennt zurück. Verbinden Sie die Elemente Ihres Arrays mit der leeren Zeichenfolge '' und Sie erhalten normalen Text.

Warum erhalten Sie den Text nicht?

Sie den Text dort eingestellt haben, aber in der jQuery initializer Funktion Sie updateTextArea() in der letzten Zeile nennen, so ist es text Ihrer textarea mit dem allVals gesetzt wird, die zum ersten Mal leer ist, wenn Sie nicht tun Wählen Sie einen beliebigen Wert.

Hier ruft es toString implizit auf die arr und ruft die Zeichenfolgendarstellung Ihres Arrays.

var arr = ['1', '2', '3'] ; 
 

 
console.log(arr);

Arbeitsbeispiel

function updateTextArea() { 
 
    var allVals = ['My text here']; 
 
    $('.taglist :checked').each(function(i) { 
 
    allVals.push((i != 0 ? "\r\n" : "") + $(this).val()); 
 
    }); 
 
    $('#form1').val(allVals.join('')).attr('rows', allVals.length); 
 

 
} 
 
$(function() { 
 
    $('.taglist input').click(updateTextArea); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea class="textfield" id="form1" name="form1">My text here</textarea> 
 
<div class="taglist"> 
 
    <label><input type="checkbox" value="Value 1">Value 1</label> 
 
    <label><input type="checkbox" value="Value 2">Value 2</label> 
 
    <label><input type="checkbox" value="Value 3">Value 3</label> 
 
    <label><input type="checkbox" value="Value 4">Value 4</label> 
 
    <label><input type="checkbox" value="Value 5">Value 5</label> 
 
</div>

1

Nach jedem Ergebnis dort aufgelistet wird ein Komma ich weiß nicht, wie zu

entferne ich möchte das Textfeld mit Text vorab zu laden und haben die Ergebnisse darunter aufgelistet ohne mein vorbelasteten Text

Überschreiben

Sie von dem Komma array.join('') bekommen kann befreien. In Bezug auf die nicht vorhandenen Text zu überschreiben, können Sie den vorhandenen Text speichern können und es wieder verwenden, wenn das Array in den Textbereich

// if you want just the original text and no new line after it do: 
 
var originalText = $('#form1').val(); 
 

 
// if you want a new line after the original text do: 
 
originalText = $('#form1').val() + '\r\n'; 
 

 
function updateTextArea() { 
 
    var allVals = []; 
 
    allVals.push(originalText); 
 
    
 
    $('.taglist :checked').each(function(i) { 
 
    allVals.push((i != 0 ? "\r\n" : "") + $(this).val()); 
 
    }); 
 
    
 
    $('#form1').val(allVals.join('')).attr('rows', allVals.length); 
 

 
} 
 

 
$(function() { 
 
    $('.taglist input').click(updateTextArea); 
 
    updateTextArea(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea class="textfield" id="form1" name="form1">My text here</textarea> 
 
<div class="taglist"> 
 
    <label><input type="checkbox" value="Value 1">Value 1</label> 
 
    <label><input type="checkbox" value="Value 2">Value 2</label> 
 
    <label><input type="checkbox" value="Value 3">Value 3</label> 
 
    <label><input type="checkbox" value="Value 4">Value 4</label> 
 
    <label><input type="checkbox" value="Value 5">Value 5</label> 
 
</div>

+0

Sie für Ihre Zeit sehr viel Dank. Neu bei Javascript. Irgendeine Idee, wie man Text vorlädt? – Greg

+0

@Greg Wenn Sie möchten, dass der ursprünglich angegebene Text beibehalten wird, können Sie ihn zum Array hinzufügen, bevor Sie ihn in das 'textarea' schreiben. Dazu habe ich ein Beispiel hinzugefügt. – Nope

0

Wie dieses Schreiben wird es funktionieren, schauen beitreten

 function updateTextArea() {  
 
      var allVals = []; 
 
      $('.taglist :checked').each(function(i) { 
 
        
 
       allVals.push((i!=0?"\r\n":"")+ $(this).val()); 
 
      }); 
 
      $('#form1').val(allVals.join(" ")).attr('rows',allVals.length) ; 
 
      
 
      } 
 
      $(function() { 
 
       $('.taglist input').click(updateTextArea); 
 
       updateTextArea(); 
 
     });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea class="textfield" id="form1" name="form1">My text here</textarea> 
 
     <div class="taglist"> 
 
     <label><input type="checkbox" value="Value 1">Value 1</label> 
 
     <label><input type="checkbox" value="Value 2">Value 2</label> 
 
     <label><input type="checkbox" value="Value 3">Value 3</label> 
 
     <label><input type="checkbox" value="Value 4">Value 4</label> 
 
     <label><input type="checkbox" value="Value 5">Value 5</label> 
 
     </div>

-1

können Sie versuchen:

http://codepen.io/joaocarvalhowd-1472219370/pen/egoBKQ?editors=1111]

var text_initial = document.querySelector('#form1').value + "\r\n"; 

function checkboxsListen() { 
    var checks = document.querySelectorAll('.taglist input[type="checkbox"]'); 

    Array.prototype.forEach.call(checks, function(check) { 

    check.addEventListener('change', function() { 
     updateTextArea(); 
    }) 

    }) 
} 

checkboxsListen(); 

function updateTextArea() { 
    var textarea = document.querySelector('#form1') 
    textarea.value = text_initial; 
    var checks_selected = document.querySelectorAll('.taglist input[type="checkbox"]:checked'); 

    Array.prototype.forEach.call(checks_selected, function(check) { 
    textarea.value += check.value + "\r\n"; 
    }) 
}