मैं कुछ ड्रैगगेबल तत्व (टोकन) बनाने की कोशिश कर रहा हूं जिसे एक संतोषजनक div के अंदर खींच लिया जा सकता है। ऐसा लगता है कि सबकुछ इसके अलावा काम कर रहा है ... जब मैं एक तत्व खींचता हूं और इसे छोड़ देता हूं, तो मैं इसे फिर से खींच नहीं सकता। ऐसा लगता है कि मैं इसे ड्रैगस्टार्ट ईवेंट से फिर से बांध नहीं सकता।एचटीएमएल 5 सामग्रीग्रस्त div के भीतर खींचने योग्य तत्व - पहली बूंद के बाद काम करना बंद कर देता है - क्यों?
किसी भी विचार क्यों ऐसा होता है और मैं इसे कैसे ठीक कर सकते हैं?
यहाँ मेरी बेला के लिए एक लिंक है: http://jsfiddle.net/gXScu/1/
HTML:
<div id="editor" contenteditable="true">
Testime siinkohal seda, et kuidas<br />
on võimalik asja testida.
<span class="draggable" draggable="true" contenteditable="false">Token</span>
</div>
<span class="draggable" draggable="true" contenteditable="false">Token 2</span>
जावास्क्रिप्ट (jQuery)
var bindDraggables = function() {
console.log('binding draggables', $('.draggable').length);
$('.draggable').off('dragstart').on('dragstart', function(e) {
if (!e.target.id)
e.target.id = (new Date()).getTime();
e.originalEvent.dataTransfer.setData('text/html', e.target.outerHTML);
console.log('started dragging');
$(e.target).addClass('dragged');
}).on('click', function() {
console.log('there was a click');
});
}
$('#editor').on('dragover', function (e) {
e.preventDefault();
return false;
});
$('#editor').on('drop', function(e) {
e.preventDefault();
var e = e.originalEvent;
var content = e.dataTransfer.getData('text/html');
var range = null;
if (document.caretRangeFromPoint) { // Chrome
range = document.caretRangeFromPoint(e.clientX, e.clientY);
}
else if (e.rangeParent) { // Firefox
range = document.createRange();
range.setStart(e.rangeParent, e.rangeOffset);
}
console.log('range', range)
var sel = window.getSelection();
sel.removeAllRanges(); sel.addRange(range);
$('#editor').get(0).focus(); // essential
document.execCommand('insertHTML',false, content);
//$('#editor').append(content);
sel.removeAllRanges();
bindDraggables();
console.log($('[dragged="dragged"]').length);
$('.dragged').remove();
});
bindDraggables();
सीएसएस:
#editor {
border: 2px solid red;
padding: 5px;
}
.draggable {
display: inline-block;
padding: 3px;
background: yellow;
cursor: move !important;
}
यह फ़ायरफ़ॉक्स पर पूरी तरह से ठीक काम करता है, इसलिए संभवतः यह क्रोम की बग है। और यह तब होता है जब आप 'insertHTML' कमांड का उपयोग करते हैं। जब मैंने इसे '$ (' # editor ') के साथ बदल दिया। संलग्न करें (सामग्री)' सब कुछ ठीक काम करता है ... – Reinmar