2011-11-15 2 views
8

J'essayais d'activer/désactiver dynamiquement les rapports d'aspect dans JQueryUI redimensionnable, mais même après avoir défini l'option sur false, il maintient le ratio d'aspect. Voici le code Je travaille actuellement avec:Impossible d'appliquer JqueryUI Redimensionnable AspectRatio après l'initialisation?

$('#aspect_check').click(function() { 
    var ischecked = $('#aspect_check').prop('checked'); 
    if (ischecked) { 
    $("#resizable").resizable("option", "aspectRatio", .75); 
    } else { 
     $("#resizable").resizable("option", "aspectRatio", false); 
    } 
}); 

J'ai trouvé un rapport de bogue il y a de 3 ans, ce qui ressemble à elle n'a pas encore été fixée, malgré le marquer critique. http://bugs.jqueryui.com/ticket/4186

Les solutions de contournement ne fonctionnent pas avec les dernières versions. Des idées?

Edit: Après avoir traversé beaucoup de rapports de bugs, voici un travail autour de:

$(function() { 
$.extend($.ui.resizable.prototype, (function (orig) { 
    return { 
     _mouseStart: function (event) { 
      this._aspectRatio = !!(this.options.aspectRatio); 
      return(orig.call(this, event)); 
     } 
    }; 
})($.ui.resizable.prototype["_mouseStart"])); 
}); 

le coller dans votre section script javascript. J'espère que ça aide quelqu'un avec un problème similaire!

+0

Vos travaux d'édition! Merci – willDaBeast

+0

La solution de contournement fonctionne uniquement avec «originalPosition» positive. Une idée de comment le faire fonctionner avec une valeur négative aussi? – Core972

Répondre

1

Je ne sais pas si cela va fonctionner ou ce qui va se passer. Mais vous pouvez essayer quelque chose comme ça. Démonstration en direct, actuellement seul l'élément traînable inférieur est conçu pour utiliser, div horizontal n'est pas stylé.

http://jsfiddle.net/t6xFN/1/

+0

Merci pour la réponse @Niels, l'exemple ne semble pas fonctionner si :(Il montre le même effet de réglage manuel.Mais après avoir passé des heures de rapport de bug, j'ai finalement trouvé une autre solution de contournement. question originale avec elle pour les autres dans la même chaussure Merci encore – Alvin

2

Je me rends compte que c'est un ancien poste, mais au cas où quelqu'un a encore besoin d'une réponse, vous pouvez le faire comme ceci:

$('#aspect_check').click(function() { 
    var ischecked = $('#aspect_check').prop('checked'); 
    if (ischecked) { 
     $("#resizable").resizable({aspectRatio : .75}); 
    } else { 
     $("#resizable").resizable(); 
    } 
}); 
0

Une autre solution est d'enregistrer les options redimensionnables dans une variable et détruire et réinitialiser le widget avec les options mises à jour:

var options = $("#resizable").resizable("options"); 
if (ischecked) { 
    options.aspectRatio = .75; 
} else { 
    options.aspectRatio = false; 
} 
$("#resizable").resizable("destroy"); 
$("#resizable").resizable(options); 
10

Cela a fonctionné pour moi sans patcher

$('#resizable') 
    .resizable('option', 'aspectRatio', false) 
    .data('uiResizable')._aspectRatio = false; 

Cette partie .data('uiResizable')._aspectRatio = false; vient à la rescousse

+1

Excellent hack, ça me sort d'un problème! – Erick

Questions connexes