2016-10-30 4 views
0

Ich bin sehr neu in Javascript. Ich möchte Mehrfachselektion für jede "Reihe" vermeiden. Ich fand ein Beispiel here, aber es entfernt Attribute aller Auswahlen auf der Seite. Ich habe versucht, es zu optimieren, um nur die Tischreihe zu unterstützen, aber kein Glück. Könnte jemand bitte helfen! Unten ist das Code-Snippet.Mehrfachauswahl für jede Zeile mit Javascript verhindern

$('select').change(function() { 
    var ary = new Array(); 
    $('select option:selected').each(function() { 
     if ($(this).val().length > 0) { 
      ary.push($(this).val()); 
     } 
    }); 
    $('select option').each(function() { 
     if ($.inArray($(this).val(), ary) > -1) { 
      $(this).attr('disabled', 'disabled'); 
     } else { 
      $(this).removeAttr('disabled'); 
     } 
    }); 
});​ 

Dies ist meine Tabellenstruktur

<tr> 
    <td class="col-md-6"> 
     <select name="from[]" class="form-control single-select" id="from"> 
      <?php foreach($arrStops as $a){?> 
       <option value="<?php echo implode($a) ?>"> <?php echo implode($a) ?></option> 
     <?php } ?> 
     </select> 
    </td> 
    <td class="col-md-6"> 
     <select name="to[]" class="form-control single-select" id="to"> 
      <?php foreach($arrStops as $a){ ?> 
      <option value="<?php echo implode($a) ?>"> <?php echo implode($a) ?></option> 
      <?php } ?> 
     </select> 
    </td> 

+0

zeigen Bitte relevanten HTML-Struktur – charlietfl

+0

Habe einfach die Struktur hinzugefügt :) –

Antwort

1

ohne HTML Ich würde die folgenden davon aus gezeigt tun, was Sie brauchen.

Sie wollen Instanzen in dieser Zeile zu isolieren, indem zuerst auf die <tr>closest() mit überqueren und dann nach innen, dass <tr> für <select> Elemente suchen, die nur in dieser Zeile existieren find() mit

$('select').change(function() { 
    // isolate row instance 
    var $row = $(this).closest('tr'); 

    var ary = new Array(); 
    // only look inside row 
    $row.find('select option:selected').each(function() { 
     if ($(this).val().length > 0) { 
      ary.push($(this).val()); 
     } 
    }); 
    $row.find('select option').not(':selected').each(function() { 
     if ($.inArray($(this).val(), ary) > -1) { 
      $(this).attr('disabled', 'disabled'); 
     } else { 
      $(this).removeAttr('disabled'); 
     } 
    }); 
});​ 
+0

Du bist ein Retter @charlieft! klappt wunderbar! –

+0

Denken Sie daran, dieses Muster ... es ist sehr häufig für das Wiederholen von Strukturen in einer Seite – charlietfl

+0

Vielen Dank Sensei! Ich bin immer noch ein Noob –