2010-10-09 25 views
9

Sto cercando di rendere trascinabili gli elementi del modulo utilizzando l'interfaccia utente di jQuery. Ad esempio, pulsanti, caselle di controllo, campi di testo, ecc. Finora non ho avuto fortuna. Avete qualche idea su come realizzare questo?Elementi di input trascinabili jQuery

risposta

2

elementi ben ingresso devono essere modificabili, in modo che li rende trascinabili li renderebbe non modificabile.

avvolgerli in un <span> o un <div> e vi consiglio caldamente di utilizzare un handle.

+0

Sì, ma se non si desidera che l'input sia modificabile. – bryan

3

Penso che questo sia più adatto alle tue esigenze :) È trascinabile + ridimensionabile sull'elemento di input ma non hai perso la natura per essere modificabile.

$(function(){ 
    $('.draggable').draggable().resizable(); 
}); 

Ecco la mia soluzione per voi: my jsFiddle.

5

Il trucco consiste nel mettere un div trasparente sopra gli elementi ingressi:

div div{ 
    position:absolute; 
    z-index:2; 
    height: 100%; 
    width: 100%; 
} 

div input{ 
    position:relative; 
    z-index:1; 
} 
<div><div>&nbsp;</div><input type="text" value="..." disabled="true"/></div> 
$('body>div').draggable(); 
+1

Questo è quello che stavo cercando. Avevo bisogno di visualizzare i moduli di input, renderli trascinabili e inutilizzabili senza modificare il loro aspetto per un WYSIWYG. Non posso credere di non aver pensato a questa semplice soluzione. – Johannes

0

la soluzione migliore è che li metti in un div o luce

5

forse 3 anni di ritardo, ma si poteva spedire evento e l'uso seguente frammento di codice per un comportamento più atteso:

DEMO jsFiddle

$(".draggable").draggable({ 
    start: function (event, ui) { 
     $(this).data('preventBehaviour', true); 
    } 
}); 
$(".draggable").find(":input").on('mousedown', function (e) { 
    var mdown = new MouseEvent("mousedown", { 
     screenX: e.screenX, 
     screenY: e.screenY, 
     clientX: e.clientX, 
     clientY: e.clientY, 
     view: window 
    }); 
    $(this).closest('.draggable')[0].dispatchEvent(mdown); 
}).on('click', function (e) { 
    var $draggable = $(this).closest('.draggable'); 
    if ($draggable.data("preventBehaviour")) { 
     e.preventDefault(); 
     $draggable.data("preventBehaviour", false) 
    } 
}); 
+0

'initMouseEvent' è deprecato - qualsiasi idea di cosa lo sostituisca? – SQLiteNoob

+2

@SQLiteNoob Thx per il feedback. Ho aggiornato la risposta usando il costruttore 'MouseEvent()' –

+0

Grazie, è una soluzione brillante al problema, – SQLiteNoob

Problemi correlati