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 のリポジトリをみてると、別のアプローチですが、修正されているみたいですね。良かったです。