No possibility to select text inside <input> when parent is draggable

后端 未结 4 1476
野趣味
野趣味 2021-01-17 10:59

This one is IE specific (not anymore, apparently). We have very simple code:

Text

相关标签:
4条回答
  • 2021-01-17 11:35

    This was reported as a bug a few months back and is currently being considered for a future release.

    One of the hold-ups is that we are unable to determine the impact of the issue. I recall searching online and on GitHub for sites that relied on this pattern, but largely came up empty-handed. If you happen to know of any sites that use this, and are therefore broken in Internet Explorer 10 and 11, I would be happy to update the internal issue and request immediate action.

    That being said, it does appear you can select text if you tab focus to the element itself, and then utilize the arrow and shift keys to perform your selection. You can also right-click the input control, which also places a cursor that you can then manipulate with your keyboard. It's not ideal, but it may suffice until we can resolve this from the browser-end.

    0 讨论(0)
  • 2021-01-17 11:36

    The way Ben McCormick mentioned works good for me on the major browsers (tested with Internet Explorer 11, Firefox and Chrome). For my solution you need to have an criteria to determine the parent with the draggable attribute (in my case I use a class name for that).

    function fixSelectable(oElement, bGotFocus)
    {
    	var oParent = oElement.parentNode;
    	while(oParent !== null && !/\bdraggable\b/.test(oParent.className))
    		oParent = oParent.parentNode;
    	if(oParent !== null)
    		oParent.draggable = !bGotFocus;
    }
    <div class="draggable" draggable="true">
        <p>Text</p>
        <input type="text" onfocus="fixSelectable(this, true)" onblur="fixSelectable(this, false)"/>
    </div>

    0 讨论(0)
  • 2021-01-17 11:37

    One possible workaround to this solution is to remove the draggable attribute from the parent element in situations where you expect the text to be highlighted.

    For instance in an application I'm working on, we show text in a span by default, then reveal an input when the user clicks on it to edit. At that point we remove the draggable attribute until the user is done editing, and then readd it.

    That particular flow may or may not work for you, but if you can anticipate when the user might highlight, you can minimize the effect of the undesirable browser behavior. At minimum you can toggle draggable on focus and blur so that the user can highlight with the mouse if he's already editing the text.

    0 讨论(0)
  • 2021-01-17 11:52

    What we observed, if we blur out and focus again the issue is resolved. However moving cursor position is still not accomplished. But at least does the trick for single click.

    $(document).on('mouseup', '#id input:text, textarea', function (event) {
       $(this).blur();       
       $(this).focus();
    });
    
    0 讨论(0)
提交回复
热议问题