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 text | O | |
input checkbox | O | |
input button | O | |
input radio | O | |
textarea | O | |
select | O | |
disableSelection().delegate | 入力部分以外は選択できない | O |
input text | X | |
input checkbox | O | |
input button | △ | |
input radio | O | |
textarea | X | |
select | X | |
sortable単体 | 入力部分以外は選択できない | O |
input text | O | |
input checkbox | O | |
input button | O | |
input radio | O | |
textarea | O | |
select | O |
※△はonclickは動いたが、フォーカスされなかったため(jsでは動くが、htmlとしては動かない)
うむ・・・。
つまり、前のバージョンでは、firefoxのsortable単体だと不具合が出ていたが、
新バージョンのfirefoxではsortable単体で動かせるようにもなったって言うことなのかな。。。
とりあえず、互換性のためにも
sortable({...}).bind('click.sortable mousedown.sortable',function(){...});
がいいみたい。