Question

J'ai un peu un problème de travail pourquoi mon événement personnalisé ne justifie pas la travailler correctement ... Mon événement personnalisé doit être attaché à chaque colonne, comment puis-je obtenir le curseur pour être lié à une seule colonne (Col. objet ci-dessous)? Avec mon code actuel si je clique sur un col tous sont redimensionnées ... Col.

Je suis en train de redimensionner dynamiquement une colonne de table à l'aide d'un curseur qui s'ouvre dans une petite div, si une table est cliqué ma petite boîte de dialogue est chargé vers le haut puis pour obtenir toutes la largeur de la colonne en cours et ajouter un gestionnaire d'événements mon code est:

//param: data = current table
function DisplayColumnData(data) {

    var cols = $(data).find("col");

   //attach slider to each col
    $(cols).each(function(i) {

            var that = this;

            var coldata = $("<div class='ui-col-data' />"); 
            var colvalue = $("<span class='ui-col-value' />");
                colvalue.text($(that).attr("width"));

            coldata.text(" >col" + i + ": ").append(colvalue);

            $(".ui-resizer-cols").append(coldata);

            //handle column resizing, bind each col to the slider...
            $(coldata).click(function() {
                $(".ui-col-data").unbind("resizehandler");
                //remove all other binded events then trigger the new event only...
                $(coldata).trigger("resizehandler", that);
            });

    });

}

$(".ui-col-data").live("resizehandler", function(event, data) {
    var $parent = $(this).closest(".ui-resizer-cols");

    //remove classes from all other cols so only the clicked col is resized
    $parent.find(".ui-col-data").removeClass("ui-col-border");
    $parent.find(".ui-col-value").removeClass("ui-resizer-val");

    $(this).addClass("ui-col-border"); //now the active col   

    var valfield = $(this).find("span.ui-col-value");
    valfield.addClass("ui-resizer-val");


    //update whatever...
    $("#ui-resizer").slider('value', valfield.text() );
    $("#ui-resizer").bind("slide", function(e, ui) {
        valfield.text(ui.value);
        $(data).attr("width", ui.value); //update col
    });

});

TABLE:

<table>
<colgroup>
      <col width="25%">
      <col width="25%">
      <col width="25%">
      <col width="25%">
</colgroup>
<tbody>
<tr>...</tr>// 4 td's here as normal
<tr>...</tr>
</tbody>
</table>

curseur:

<div class="ui-resizer-content">
        <div id="ui-resizer" class="ui-slider ui-slider-horizontal ui-widget ui-widget-content ui-corner-all">
        <div class="ui-slider-range ui-slider-range-max ui-widget-header" style="width: 100%;"></div><a href="#" class="ui-slider-handle ui-state-default ui-corner-all" style="left: 0%;"></a></div>
        <div class="ui-resizer-cols"></div>

           <p> <a href="#" id="lnkResizer" style="float: right;">close</a>
        </p>
    </div>
Était-ce utile?

La solution

Ce ne fut pas si clair (du moins pour moi) de la documentation, mais le correctif est:

 $("#ui-resizer").slider({
                    slide: function(e, ui) {
                        valfield.text(ui.value + "%");
                        $(column).attr("width", ui.value); //update col
                    }
                });

Apparantly le code je (ci-dessous) est globale pour tous les curseurs à l'aide d'un seul gestionnaire, et le correctif est au-dessus spécifique à une instance d'un curseur? (Si je comprends bien)

$("#ui-resizer").bind("slide", function(e, ui) { ... }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top