2017-06-06 46 views
0

我使用此代碼拖動DIV,這是一個小信息框。其中,我有一些簡單的HTML,包括輸入文本或類似的。啓用拖拽(查看代碼)時,所有輸入都被凍結。JavaScript拖動div代碼將凍結輸入文本

var selected = null, // Object of the element to be moved 
    x_pos = 0, y_pos = 0, // Stores x & y coordinates of the mouse pointer 
    x_elem = 0, y_elem = 0; // Stores top, left values (edge) of the element 

// Will be called when user starts dragging an element 
function _drag_init(elem) { 
    // Store the object of the element which needs to be moved 
    selected = elem; 
    x_elem = x_pos - selected.offsetLeft; 
    y_elem = y_pos - selected.offsetTop; 
} 

// Will be called when user dragging an element 
function _move_elem(e) { 
    x_pos = document.all ? window.event.clientX : e.pageX; 
    y_pos = document.all ? window.event.clientY : e.pageY; 
    if (selected !== null) { 
     selected.style.left = (x_pos - x_elem) + 'px'; 
     selected.style.top = (y_pos - y_elem) + 'px'; 
    } 
} 

// Destroy the object when we are done 
function _destroy() { 
    selected = null; 
} 

document.onmousemove = _move_elem; 
document.onmouseup = _destroy; 

有一個更大的代碼在這裏,所以我將簡化:

div = document.getElementById("mydiv"); 

    div.onmousedown = function() { 
     _drag_init(this); 
     return false; 
    }; 

現在,當我顯示DIV,拖動工程進展順利(FF 53),但內凍結任何輸入元素:)

我的信息框(在DIV)的內容簡單

<input id="input_text" type="text" name="product" list="productName"/> 
<datalist id="productName"> 
    <option value="Pen">Pen</option> 
    <option value="Pencil">Pencil</option> 
    <option value="Paper">Paper</option> 
</datalist><br> <button id="myNiceButton" action="input_text">OK</button> 

我已經嘗試過一堆搜索解決方案的ns從StackOverflow沒有成功,包括例如。這一個

Prevent drag event to interfere with input elements in Firefox using HTML5 drag/drop

<div draggable="true" id="draggableDiv"> 
    <textarea onfocus="onFocus();" onblur="onBlur();">Inside draggable (FIXED)</textarea> 
</div> 

但目前看來,這些事件不會被觸發的。也試過draggable =「false」,但同樣的故事,不工作。

會出現什麼問題?

回答

1

其實拖動代碼很好。

div.onmousedown = function() { 
    _drag_init(this); 
    return false; // <-- remove this 
}; 

或play with preventdefault()哪一個最合適。

event.preventDefault() vs. return false

返回假這裏將防止任何鼠標「下來」,所以我想這是不可能在輸入文本點擊鼠標,像個「已禁用」。

+0

作品。謝謝! – user1797147