jquery.overscroll.js ver 1.6.0 を使ってて、その領域内に input[type=text] や textarea タグなどが入っていると、それらの要素が反応しなくなります。該当の要素に cancelOn を指定しても改善されません。
困ったので、コードを見てみると原因が分かりました。cancelOn を判定している箇所があるのですが、その判定以前に、event.preventDefault() しています。これにはこれで意味があるのかも知れませんが、event.preventDefault() の記述を cancelOn 判定後に移動させると、期待どおり input や textarea などのタグが通常通り反応するようになり、また他にも特段影響も見られないので、とりあえずヨシとしたいと思います。
今後改善や改良があるかも知れませんが、以下、修正した部分のコードです。
jquery.overscroll.js のバージョンは ver 1.6.0 です。
|
345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 |
// starts the drag operation and binds the mouse move handler start = function (event) { //event.preventDefault(); //Move to line of 361 var data = event.data, target = data.target, start = data.start = $(event.target), flags = data.flags; // stop any drifts flags.drifting = false; // only start drag if the user has not explictly banned it. if (!start.is(data.options.cancelOn)) { event.preventDefault(); //Move from line of 348 //target.css('cursor', compat.cursorGrabbing); flags.dragging = flags.dragged = false; target.on(events.drag, data, drag); data.position = capturePosition(event, {}); data.capture = capturePosition(event, {}, settings.captureThreshold); triggerEvent('dragstart', target); } }, |
上のコードで、348 行目を、361 行目に移動させています。
§
ちなみに、この件は不具合修正の依頼だけ対応したのですが、よりあたらしい jquery.overscroll.js のリポジトリをみてると、別のアプローチですが、修正されているみたいですね。良かったです。