2010-12-23 6 views
0

Ich arbeite an einem Formular, wo, wenn Benutzer auf "Server hinzufügen" klickt, ein Div-Block wiederholt wird. Ich habe es geschafft, das auszuarbeiten. Aber wenn ich nur einen Serverblock habe, möchte ich das Attribut name="servername", und wenn es mehr Elemente gibt, sollte das Attribut name="servername[]" auf allen Blöcken sein.jQuery Ändern von Attributelementen

Ich versuchte und einzige Sache, die funktioniert, wenn geklickt wird, fügen Server zuerst und zweiter Block wird name="servername[]", aber wenn ich noch einmal klicke, bekommt erster Block name="servername[][]".

$('#addserver').click(function() { 
var num = $('.clone').length; // how many "duplicatable" input fields we currently have 
var newNum = new Number(num + 1); // the numeric ID of the new input field being added 

// Create the new element via clone(), and manipulate it's ID using newNum value 
var newElem = $('#server1').clone().attr('id', 'server' + newNum); 

// Insert the new element after the last "duplicatable" input field 
$('#server' + num).after(newElem); 

// Add [] for PHP array 
$('#server' + num + ' input', '#server' + newNum + ' input').attr('name', function() { 
return this.name + '[]'; 
}); 

// Enable the "remove" button 
$('#delserver').attr('disabled',''); 

// You can only add 5 elements 
if (newNum == 5) $('#addserver').attr('disabled','disabled'); 
}); 

$('#delserver').click(function() { 
var num = $('.clone').length; // how many "duplicatable" input fields we currently have 
$('#server' + num).remove(); // remove the last element 

// enable the "add" button 
$('#addserver').attr('disabled',''); 

// If only one element remains 
if (num-1 == 1) { 

    // Remove [] because it's not php array anymore 
    $('#server1 input').attr('name', function() { 
     s = this.name.substring(0, this.name.length - 2); 
     return s; 
    }); 

    // Disable "remove" button 
    $('#delserver').attr('disabled','disabled'); 
} 
}); 

$('#delserver').attr('disabled','disabled'); 

Hier html Beispiel:

<div class="clone" id="server1"> 
    <input type="text" name="servername" size="40" /> 
</div> 

Ich brauche [] wegen der PHP-Array, aber wenn Benutzer einen Server eingeben und es wird [] im Namen funktioniert es nicht.

Antwort

1

Ich denke, hinzufügen, dass man einfach name="servername[]" egal was haben sollte.

Da Sie es zur Arbeit bekommen können, wenn servername mehr als ein Element enthält, sehe ich nicht, was Sie daran hindert, es mit nur einem (oder gar keinem) Element zu funktionieren.

Wenn Sie nicht völlig überzeugt sind, überlegen Sie, wie viel Ärger Sie gerade haben, versuchen Sie, gegen das zu kämpfen, was ich vorschlage.

+0

Und er muss auch einen anderen Logikzweig haben, wenn es nur einen Server gibt. – Gazillion

1

einen Scheck

if ($(this).attr('name').substr(-2) != '[]') { 
    return $(this).attr('name') + "[]"; 
}