Domanda

Ho qualche problema a capire perché il mio evento personalizzato non si attiva e non funziona correttamente ... Il mio evento personalizzato dovrebbe essere allegato a ciascuna colonna, come posso fare in modo che il cursore sia associato a una sola colonna (colonneoggetto sotto)?Con il mio codice attuale, se clicco su una qualsiasi colonna, tutte le colonne vengono ridimensionate ...

Sto cercando di ridimensionare dinamicamente una colonna della tabella utilizzando un cursore che si apre all'interno di un piccolo div, se si fa clic su una tabella la mia piccola finestra di dialogo viene caricata, quindi per ottenere tutta la larghezza della colonna corrente e aggiungere un gestore di eventi il mio codice è:

//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
    });

});

TABELLA:

<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>

Slider:

<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>
È stato utile?

Soluzione

Questo non era così chiaro (almeno per me) dalla documentazione, ma la soluzione è:

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

Apparentemente il codice che ho usato (sotto) è globale per tutti gli slider che utilizzano un singolo gestore e la correzione sopra è specifica per un'istanza di uno slider?(se ho capito bene)

$("#ui-resizer").bind("slide", function(e, ui) { ... }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top