firefox40.0に更新されたら、disableSelection()につけた、delegate()が動かなくなった件について

とりあえずよくわからないので、検索すると以下のようなものがでてきた。

jQuery UI の.disableSelection()がdeprecated(非推奨)になってる件 - kamegu's memo

version1.6で追加されて、1.9からDeprecated。
http://api.jqueryui.com/disableSelection/
そもそも今使っているバージョン()に限っていえば、
$(".sortable").sortable();
だけでもテキストの選択はできない。
Deprecatedになる前のjQuery UI 1.8.1(+jQuery 1.7.1)でもテキストの選択はできません。
文字列を選択できなくするならCSSでやれ、って話も。

現在動いているjsの環境が1.11.1なのでそれっぽいかも??

jQuery UIでリストのソート機能を実装したときにFirefoxとかでinputのフォーカスがおかしくなる件 | Bamboo lath 日々の記録

結局以下↓の箇所を
el.disableSelection().delegate('input,textarea','click',function(ev){
ev.target.focus();
});

「【jQuery】sortable()を設定したタグ内のtextarea, inputタグに入力出来ない」このページの内容通りに以下↓のように変更。
el.bind('click.sortable mousedown.sortable',function(ev){
ev.target.focus();
});

うん、これだ。
ということで治ったみたい。

どのような環境で、inputが動かなくなったのか?

ところで、sortableの後ろを変更させてみるとinputの動作はどうなるのだろうか?

というわけで以下の3つのものについて検証。

sortable({...}).bind('click.sortable mousedown.sortable',function(){...});
sortable({...}).disableSelection().delegate('input,textarea,select',function(){...});
sortable({...});

検証環境

jQuery UI: Sortableウィジェットで並べ替え可能なリストを生成するには? - Build Insider を参考にして動くコードを書いてみた。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>Sortableウィジェット</title>
    <style type="text/css">
        <!--
        table, th, td { border-collapse: collapse; border: solid 1px #000; }
        -->
    </style>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <link type="text/css" rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/cupertino/jquery-ui.min.css" />
    <script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
    <script type="text/javascript">
        <!--
        $(function() {
            $('#list').sortable({
                update: function(ev, ui) {
                    var Array = $("#list").sortable("toArray");
                    alert(Array)
                }
            }).bind('click.sortable mousedown.sortable',function(ev){//この辺を変更する
                ev.target.focus();
            });
        });
        -->
    </script>
</head>
<body>
<table>
    <thead>
    <th>ID番号</th><th>input</th>
    </thead>
    <tbody id="list">
    <tr id="1">
        <th>1</th>
        <td><input type="text" placeholder="aaa"></td>
    </tr>
    <tr id="2">
        <th>2</th>
        <td><input type="checkbox" value="checked"></td>
    </tr>
    <tr id="3">
        <th>3</th>
        <td><input type="button" value="button" onclick="alert('button clicked')"></td>
    </tr>
    <tr id="4">
        <th>4</th>
        <td><input type="radio" name="t" value="1">aaa
            <input type="radio" name="t" value="2">bbb
        </td>
    </tr>
    <tr id="5">
        <th>5</th>
        <td><textarea name="cat" id="" cols="30" rows="10">test</textarea>
        </td>
    </tr>
    <tr id="6">
        <th>6</th>
        <td><select name="test">
                <option value="1">aaa</option>
                <option value="2">bbb</option>
                <option value="3">ccc</option>
                <option value="4">ddd</option>
                <option value="5">eee</option>
            </select>
        </td>
    </tr>
    </tbody>
</table>
</body>
</html>

結果

関数 入力方法判定
bind 入力部分以外は選択できないO
input textO
input checkboxO
input buttonO
input radioO
textareaO
selectO
disableSelection().delegate 入力部分以外は選択できないO
input textX
input checkboxO
input button
input radioO
textareaX
selectX
sortable単体 入力部分以外は選択できないO
input textO
input checkboxO
input buttonO
input radioO
textareaO
selectO

※△はonclickは動いたが、フォーカスされなかったため(jsでは動くが、htmlとしては動かない)

うむ・・・。
つまり、前のバージョンでは、firefoxのsortable単体だと不具合が出ていたが、
新バージョンのfirefoxではsortable単体で動かせるようにもなったって言うことなのかな。。。

とりあえず、互換性のためにも
sortable({...}).bind('click.sortable mousedown.sortable',function(){...});
がいいみたい。