J’utilise des tabs d’interface utilisateur Jquery qui ne sont utilisés qu’avec les boutons précédent et suivant. Dans mon premier onglet, j’ai des cases à cocher et pour avancer, vous devez choisir une option dans la case à cocher. Mon problème se trouve dans l’onglet 2. J’ai trois champs de saisie que j’aimerais que l’utilisateur remplisse avant d’aller plus loin.
Comment puis-je désactiver le bouton Suivant afin que l’utilisateur soit obligé de remplir les champs de saisie avant de passer à l’onglet suivant? EXEMPLE
JS- NEXT / PREVIOUS
$(function() { var $tabs = $('#tabs').tabs({ disabled: [0, 1] }); $(".ui-tabs-panel").each(function(i) { var totalSize = $(".ui-tabs-panel").size() - 1; if (i != totalSize) { next = i + 2; $(this).append("Next Page »"); } if (i != 0) { prev = i; $(this).append("« Prev Page"); } }); $('.next-tab, .prev-tab').click(function() { var tabIndex = $(this).attr("rel"); if ( /*(1)*/ $('#tabs').tabs('option', 'selected') > 0 || /*(2)*/ ($('.update.last').length > 0 && parseInt($('.update.last').val(), 10) > 0) ) { $tabs.tabs('enable', tabIndex) .tabs('select', tabIndex) .tabs("option","disabled", [0, 1]); } return false; }); });
HTML
<input type="text" id="title" name="title" class="" size="33" autocomplete="off" value=""/>
<input type="text" name="price" class="" size="8" maxlength="9" id="price" autocomplete="off" value="" />
Ne modifiez l’onglet du bouton suivant ou précédent que si
Voici la prochaine extension non testée:
$('.next-tab, .prev-tab').click(function() { var tabIndex = $(this).attr("rel"); if ( $(this).hasClass('prev-tab') || /*(A)*/ ( $('#tabs').tabs('option', 'selected') == 0 && /*(B)*/ $('.update.last').length > 0 && parseInt($('.update.last').val(), 10) > 0 ) || ( $('#tabs').tabs('option', 'selected') == 1 && /*(C)*/ $.sortingm($('#title').val()).length > 0 && $.sortingm($('#price').val()).length > 0 && $.sortingm($('#description').val()).length > 0 ) ) { $tabs.tabs('enable', tabIndex) .tabs('select', tabIndex) .tabs("option","disabled", [0, 1]); } return false; });
=== UPDATE ===
Ajout d’une alerte d’onglet spécifique:
$('.next-tab, .prev-tab').click(function() { var prev = $(this).hasClass('prev-tab'); var currentTab = $('#tabs').tabs('option', 'selected'); if ( prev || /*(A)*/ ( currentTab == 0 && /*(B)*/ $('.update.last').length > 0 && parseInt($('.update.last').val(), 10) > 0 ) || ( currentTab == 1 && /*(C)*/ $.sortingm($('#title').val()).length > 0 && $.sortingm($('#price').val()).length > 0 && $.sortingm($('#description').val()).length > 0 ) ) { var tabIndex = $(this).attr("rel"); $tabs.tabs('enable', tabIndex) .tabs('select', tabIndex) .tabs("option","disabled", [0, 1]); } else if (!prev) { switch (currentTab) { case 0: alert('Please choose an option.'); break; case 1: case 2: alert('Please fill out all form inputs.'); break; } } return false; });
Modifiez le gestionnaire d’événements click:
$('.next-tab, .prev-tab').click(function() { var $t = $(this), tabIndex = $t.attr("rel"); if ($t.hasClass("prev-tab")) { if ($("input").filter('[value=""]').length) { alert("Please fill out all form inputs."); return false; } } ...
J’espère que cela pourra aider.
Vous pouvez écrire une fonction de validation qui examine l’onglet sélectionné, puis les éléments à renseigner pour que l’option suivante soit activée. Cette fonction peut ensuite être liée à la modification de chacun des éléments à renseigner.