2 Stimmen

JQuery hinzufügen Zeile zu Tabelle und binden Ereignis nur zum letzten Element

Ich versuche, eine Kopie eines Auswahlmenüs an das Ende einer Tabelle anzuhängen, wenn eine Auswahl im letzten Auswahlmenü der Liste getroffen wird. Zu diesem Zeitpunkt möchte ich das Verhalten nur auf das letzte Auswahlmenü in der Tabelle anwenden. Der folgende Code fügt die Zeile zur Tabelle hinzu, hebt aber die Bindung der Aktion nicht erfolgreich auf, so dass das erste Auswahlmenü weiterhin das Verhalten anzeigt, auch nachdem die Bindung der Aktion aufgehoben wurde.

Javascript:

var selectRow;
$(document).ready(function() {
    selectRow = $('#selectWrapper').html();
    rebindLastSelectBox();  
});

function rebindLastSelectBox() {
    $('#selectList:last').change(function(e) {          
                $(this).unbind('change');
        $('table').append("<tr id='selectWrapper'>" + selectRow + "</tr>");
                rebindLastSelectBox();
   });
};

HTML:

<head>
    <title>JS Test</title>
    <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
    <script src="./js/application.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>

<table>
    <tr>
        <td>Title</td><td><input type="text" name="some_name" value="" id="some_name"></td>
    </tr>
    <tr id='selectWrapper'> 
        <td>Items</td><td><select name="items[]" id="selectList" size="1">
            <option value="1">Item 1</option>
            <option value="2">Item 2</option>
        </select></td>
    </tr>
</table>
</body>

Für alle Vorschläge sind wir dankbar!

Adam

3voto

redsquare Punkte 76970

Um zu arbeiten, ändern Sie einfach die id's zu Klassen auf der tr und die select. Die js kann verbessert werden, aber lässt Sie arbeiten zuerst.

<head>
    <title>JS Test</title>
    <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
    <script src="./js/application.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>

<table>
    <tr>
        <td>Title</td><td><input type="text" name="some_name" value="" id="some_name"></td>
    </tr>
    <tr class='selectWrapper'>     
        <td>Items</td><td><select name="items[]" class="selectList" size="1">
                <option value="1">Item 1</option>
                <option value="2">Item 2</option>
        </select></td>
    </tr>
</table>
</body>

var selectRow;
$(document).ready(function() {
    selectRow = $('tr.selectWrapper').html();
    rebindLastSelectBox();  
});

function rebindLastSelectBox() {
    $('select.selectList:last').change(function(e) {                  
        $(this).unbind('change');
        $('table').append("<tr class='selectWrapper'>" + selectRow + "</tr>");
        rebindLastSelectBox();
   });
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X