Angular.js: ngClick استخدام حرائق ngTouch مرتين

تم إنشاؤها على ١٤ فبراير ٢٠١٤  ·  67تعليقات  ·  مصدر: angular/angular.js

يتم تشغيل ngTouch 1.2.1 على Safari iOS 7 مرة ثانية من خلال النقر في أي مكان على الشاشة:

http://jsfiddle.net/coma/2hWWa/embedded/result/

http://stackoverflow.com/questions/21708730/why-are-multiple-click-events-fired-when-using-ngtouch/21766071#21766071

Lots of comments ngTouch moderate broken expected use bug

التعليق الأكثر فائدة

لدي أيضًا هذه المشكلة حيث في أي وقت اتصلت بوظيفة النطاق ، تم إطلاقها مرتين ، وعلى الرغم من أنه يمكنك القيام بحل بديل كما اقترح

لحسن الحظ ، اكتشفت أن المادة الزاويّة لها أسلوب النقر فوق Hijack ، ويمكنك إيقاف ذلك.

لتعطيل angular-mateiral click hijack ، تحتاج فقط إلى وضع هذا في ملف التكوين الخاص بك:

.config(function( $mdGestureProvider ) {
    $mdGestureProvider.skipClickHijack();
  });

لقد قمت باختبار هذا الحل ويبدو أنه يحل المشكلة. ومع ذلك ، لقد جربته فقط بنقرة نانوغرام. لست متأكدًا من كيفية تأثير ذلك على أي إيماءات مادية زاوية أخرى ، ولكن في الوقت الحالي ، يتم استدعاء وظائفي مرة واحدة فقط :)

ال 67 كومينتر

أنا أيضًا أواجه أوقاتًا عصيبة مع هذه المشكلة.

أي أفكار عن سبب ذلك ، وما إذا كان هناك حل بديل يمكنني استخدامه؟

أعتقد أنه شيء متعلق بانتشار الحدث ، هذا هو الحل:

http://jsfiddle.net/coma/2hWWa

لدي مشكلة مماثلة.

يحتوي تطبيقي على مربع حوار منبثق به زر يغلقه. عندما يكون زر الحوار أعلى عنصر إدخال نص ، فإن النقر فوق الزر الموجود على أجهزة شاشة اللمس لا يؤدي إلى إغلاق مربع الحوار فحسب ، بل يركز أيضًا على الإدخال.

نفس المشكلة هنا باستخدام angular w / angular-touch 1.2.9.

لا توجد عناصر أخرى قابلة للنقر في الشجرة للنشر إليها. يتم تشغيل الحدث _very same_ click مرتين على التوالي. هذا لا يحدث مع الضربات الشديدة. أيضًا ، تختفي مشكلة إطلاق أحداث ngClick مرتين عندما أقوم بإزالة ngTouch من المشروع.

أواجه هذه المشكلة أيضًا في ngTouch 1.2.13 ،

اعتمادًا على الموقف ، يعد هذا أكثر من مجرد خطأ بصري ، ولكن في حالتي يؤدي إلى مشاكل استخدام مزعجة إلى حد ما:

على سبيل المثال ، أقوم بتغيير طريقة العرض باستخدام ngTouch المنشط وبنقر ng-click على جهاز يعمل باللمس لفتح نموذج ، مما يضعه بنفسه فوق العنصر الذي تم النقر عليه. ضمن هذا العنصر ، يكون العنصر القابل للنقر في نفس المكان الذي يوجد فيه العنصر الذي تم النقر عليه مسبقًا (الموجود الآن أعلاه) ، ثم قد يحدث أن يتم تشغيل الحدث الثاني ويتم النقر فوق الزر في الوضع / إطلاقه.

قد يؤدي هذا إلى سلوك غير مرغوب فيه للتطبيق.

مرحباً ريتشارد ، هذا هو بالضبط نفس نوع المشكلة التي نواجهها.

المرجع jquery (قبل angular.js) لإيقاف انتشار الحدث ومنع الحرائق المزدوجة.

هذا لا يبدو وكأنه حل. نحن لا نستخدم jQuery في تطبيقنا. هل هذه السلسلة تقول أن هذا لن يتم تناوله قبل 1.3؟

هذه المشكلة تجعل ngClick غير قابل للاستخدام. كيف يعمل الناس حول هذا؟ تنازل؟ الرجوع إلى ngClick الأصلي؟

أضفت ngTouch للحصول على وظيفة التمرير السريع ، والآن أنا مثقل بهذه المشكلة.

لقد قمنا بتشغيل مفترق ng-touch الخاص بنا مع التغييرات في https://github.com/angular/angular.js/pull/6995
بخلاف ذلك ، لقد رأيت مشروعات تقوم بإجراء تنقيح يدوي حيث يتم تجاهل النقرات التي تقع في حدود 200 مللي ثانية من بعضها البعض.

أنا أواجه هذه المشكلة أيضًا. يبدو أن الحل البديل لـ coma قد أصلحه .

أعتقد أن هذه المشكلة نفسها قد تم إصلاحها في fastclick بالفعل: المشكلة والإصلاح .

بدأت للتو في استخدام مادة الزاوية وواجهت هذه المشكلة نظرًا لأن المادة تتضمن نغمات.

إجراء 1+ باستخدام المواد بالإضافة إلى وجود نفس المشكلة.

أي تحديثات لهذه القضية؟ وهل هناك حل؟ أنا أستخدم ngtouch 1.3.14 وما زلت أواجه هذه المشكلة

+1

أي تعديل حدث في هذه القضية؟ تطوير تطبيق باستخدام مادة الزاوية وهو يعمل بشكل رائع على سطح المكتب ولكن على سجلات النقر فوق الهاتف المحمول مرتين.

في حالتي ، تسبب الاستفسار (باعتباره تبعية لتقويم واجهة المستخدم) في حدوث هذه المشكلة. تعذر العثور على حل ...

+1

+1

مع ما يزيد عن 2 من عمليات الالتزام ، تمت إضافة نوع من تأثير الخصم .. يعمل تعيين الحد الأدنى للمبلغ على إصلاح مشكلة إطلاق ngTouch مرتين ، يرجى الاختبار ومعرفة ما إذا كان يعمل أيضًا في حالتك ..

في GenyMotion على محاكي Android 4.1 ، أحصل دائمًا على event.timeStamp undefined => لا يحدث ارتداد.

mobilabgit هل تقترح إنشاء طوابع وقت الحدث يدويًا عبر new Date() دليل أكثر على البيئة من event.timeStamp .. ؟؟

لا تقترح أي شيء ، فقط توضح حقيقة أنه في التكوين المذكور ، يعود event.timeStamp غير محدد.

أي تحديث على هذا؟ هذا يسبب havok في طلبي. تطلق القوائم والأزرار نقرات مرتين.

أنا أعاني من هذه المشكلة أيضًا. زر إطلاق النار ng-click مرتين .. يجعل إدخال بيانات التطبيق غير قابل للاستخدام تقريبًا على نظام iOS ، وهو أمر محبط للغاية بالفعل.

mobilabgitjgodirexebin هل يا رفاق باستخدام الزاوي المواد من قبل أي فرصة ؟؟

NorikDavtian نعم ، والخبر السار هو أنهم قاموا بحل المشكلة في فرعهم الرئيسي .. يمكنك التحقق من هذه الموارد لمزيد من المعلومات حول المشكلة
https://github.com/angular/angular.js/pull/10766
ويوضح رمز الشفرة هذا الإصدارات المختلفة ... يمكنك محاولة دمجها لمعرفة ما ينجح
http://codepen.io/marcysutton/pen/YPxrLd

على سبيل المثال ngMaterial 0.7.1 مع ngAria <2.1.5 لا يحتوي على الخطأ ...
في انتظار ngMaterial> 0.8.3 (حاليًا على المستوى الرئيسي) والتي أصلحت الخطأ أيضًا

لقد قمت بحل المشكلة بإزالة تصميم المواد 0.83.

لقد قمت أيضًا بإزالة bootstrap.js وفي مكانه باستخدام bootstrap ui jus فقط. ونتيجة لذلك فإن العودة إلى الزاوية 1.2.28. فقط في حالة عدم عمل واجهة مستخدم bootstrap في مكان ما مع 1.3.x. البق غير المعروف مخيف.

لقد كرهت الخطأ كثيرًا لدرجة أنني أزلت أيضًا ng-touch.

الآن لدي تأخير 300 مللي ثانية للنقرات ، لكنه يشعر بالاستقرار القوي ، وأنا أقيم استقرارًا على أداء panaty بالتأخير.

التصحيح الفرعي iOS Safari ليس أفضل تجربة تصحيح أخشى. يكلفني الخطأ 3 أيام عمل. أجبرني على إعادة تشكيل الكود لي ، وتغيير كل عناصر التصميم المادي إلى إعداد التمهيد القديم الجيد. بيتا بالفعل غير مخصص للاستخدام الإنتاجي.

أتمنى أن يكون ما ورد أعلاه قد وفر بعض الوقت.

-
مرسل من صندوق البريد

يوم الجمعة 27 مارس 2015 الساعة 1:13 صباحًا أحمد عبد الرزاق
كتب [email protected] :

NorikDavtian نعم ، والخبر السار هو أنهم قاموا بحل المشكلة في فرعهم الرئيسي .. يمكنك التحقق من هذه الموارد لمزيد من المعلومات حول المشكلة
https://github.com/angular/angular.js/pull/10766
ويوضح رمز الشفرة هذا الإصدارات المختلفة ... يمكنك محاولة دمجها لمعرفة ما ينجح
http://codepen.io/marcysutton/pen/YPxrLd
على سبيل المثال الفرع الرئيسي على المصنفات الدقيقة للمواد
و ngMaterial 0.7 مع ngAria <2.1.5 لا يحتوي على الخطأ ...

في انتظار ngMaterial> 8.3 (حاليًا على المستوى الرئيسي) والتي أصلحت الخطأ أيضًا

قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub:
https://github.com/angular/angular.js/issues/6251#issuecomment -86781164

شكرًا artmees .. كان حل السبب الجذري للمشكلة حلاً أفضل من إضافة شيكات إضافية في ng touch .. كل شيء يعمل الآن.

شكرًا rexebin على الاستجابة .. يمكنني

أنا جديد على الزاوي وواجهت هذه المشكلة اليوم. لقد سحبت للتو عبر اللمس الزاوي. لذا لدي الأحدث ولم يتم إصلاحه هناك. نوريك ، هل يمكنك توضيح ما يجب علي فعله من أجل الحصول على هذا العمل محليًا؟

dangros إنها ليست Angular Touch .. كما ذكرت artmees إنها مكتبة المواد الزاويّة بشكل أكثر تحديدًا أجزاء إمكانية الوصول المتعلقة بـ Aria ..

تغيير تعريشك angular-material إلى

"angular-material": "master" أو إذا كنت تريد التأكد من أن التصميم الخاص بك لن ينكسر ، فقم بتغييره إلى الإصدار الرئيسي الحالي من الالتزام .. تأكد من التغيير إلى إصدار ثابت عندما يتم دمج الإصلاح في علامة جديدة ، وإلا ستفعل ذلك دائمًا تستخدم برنامج Master ، مما قد يتسبب في حدوث مشكلات أخرى في المستقبل ..

حظا سعيدا.

أنا لا أستخدم مادة الزاوية. فقط لمسة الزاوي

قم بإجراء هذه التغييرات على ملف ng-touch .. قد يبدو إصدار bower الخاص بك مختلفًا قليلاً ولكن يجب أن يبدو محتواه كما هو.
https://github.com/NorikDavtian/angular.js/blob/master/src/ngTouch/directive/ngClick.js

اسمحوا لي أن أعرف ما اذا كان يعمل..
إذا استمرت مشكلتك ، فسأكون سعيدًا لإجراء جلسة شاشة لتشخيص مشكلتك.

NorikDavtian شكرا. أحببت تصميم المواد لنظام تخطيط الشبكة والتوجيهات والخدمات وسهولة الاستخدام وفلسفة التصميم الخاصة به. لقد أحببت أيضًا فكرة التخلص من تأخير 300 مللي ثانية. سأستمتع بمشروع جديد مرة أخرى وأرى كيف تسير الأمور ، ولكن ليس مع مشروعي الرئيسي لأنه يحتوي على جدول زمني صارم.

الرجاء تصحيح لي إذا كنت مخطئًا: سيكون تأخير 300 مللي ثانية موجودًا عندما نستخدم ng-touch أو تصميم المواد أم لا. ng-touch and material design سوف يرسلان نقرة على الفور ويختطفان ويوقفان إرسال نقرة الإرسال بواسطة المتصفح. من خلال إجراء تعديل على ngClick.js في ng-touch أو سحب الفرع الرئيسي لتصميم المواد مع إصلاحات ngclick ، ​​أفترض أنه يخطف أيضًا الروابط التشعبية العادية حتى لا تنقر الروابط التشعبية نقرًا مزدوجًا.

rexebin حاول استخدام https://github.com/ftlabs/fastclick لإزالة تأخير 300 مللي ثانية إذا اخترت إلغاء الاشتراك في ng-touch ، أو تريده أو لا تريده إذا كنت تريد نقرة فائقة السرعة ، فيجب عليك تغيير سلوك المتصفح الأصلي وإلا فأنت عالق في هذا التأخير.

حاولت fastclick. باستخدامه ، يجب أن تحتوي جميع نقرات ng على فئة خاصة عليها لتعمل بشكل صحيح. وإلا فقد ينقر مرتين على الفور ثم بعد ذلك ، نأمل أن يتوقف الأمر بعد ذلك ب 300 مللي ثانية بعد ذلك عن طريق fastclick و ng-touch وما إلى ذلك.

يبدو جنونيًا. هل يستحق بذل كل عناء لإيقاف 300 مللي ثانية حسب التصميم على شاشات اللمس؟ أعتقد أن هذا يعتمد ..

-
مرسل من صندوق البريد

يوم السبت ، 28 مارس 2015 الساعة 10:19 صباحًا ، نوريك دافتيان إخطارات @github.com
كتب:

rexebin حاول استخدام https://github.com/ftlabs/fastclick لإزالة تأخير 300 مللي ثانية إذا اخترت إلغاء الاشتراك في ng-touch ، أو تريده أو لا تريده إذا كنت تريد نقرة فائقة السرعة ، فيجب عليك تغيير سلوك المتصفح الأصلي وإلا فأنت عالق في هذا التأخير.

قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub:
https://github.com/angular/angular.js/issues/6251#issuecomment -87200661

مرحبًا بالجميع ، هذه المشكلة تسبق ngAria والمواد الزاويّة. كانت هناك مشكلات ng-click مع ngAria في الماضي ، لكن يجب إصلاحها الآن. يتم تحديث Angular Material لسحب إصدار Angular-aria 1.3.15 ، بحيث يختفي هذا الخطأ المحدد. ولكن بالنظر إلى فتح هذه المشكلة في فبراير 2014 ، فإن أي مشكلات قد تكون واجهتها مع Angular Material لا علاقة لها.

يتسبب هذا الخطأ أيضًا في حدوث الكثير من المتاعب في تطبيقي ولا أريد حقًا اللجوء إلى توجيه النقر المخصص الخاص بي لأبسط شيء. أنا لا أستخدم libs Angular Material .. فقط ng-touch. لقد قمت للتو بترقية كل شيء إلى angular 1.4 angular-touch 1.4 ومن المحزن جدًا رؤية هذا الخطأ الذي يؤثر على العديد من الأشخاص لم يتم إصلاحه في إصدار هام :(

أنا أيضًا متأثر بنفس المشكلة:

تعريشة:

  "dependencies": {
    "angular-animate": "1.3.16",
    "angular-cookies": "1.3.16",
    "angular-touch": "1.3.16",
    "angular-sanitize": "1.3.16",
    "jquery": "2.1.4",
    "angular-resource": "1.3.16",
    "angular-ui-router": "0.2.15",
    "angular-material": "0.8.3",
    "angular": "1.3.16",
    "angular-leaflet-directive": "0.8.2",
    "angular-moment": "0.10.1",
    "ngDialog": "0.4.0",
    "angular-strap": "2.2.4",
    "bootstrap": "3.3.4",
    "angular-carousel": "0.3.10",
    "lodash": "3.9.3",
    "angular-validation-match": "1.5.0",
    "ng-file-upload": "5.0.1",
    "angular-sweetalert": "1.1.0",
    "Leaflet.awesome-markers": "2.0.2",
    "angulartics": "0.18.0"
  },
  "devDependencies": {
    "angular-mocks": "1.3.16"
  },
  "resolutions": {
    "angular": "~1.3.x"
  }

فقط واجهت هذا بنفسي وأنا أكرهه ، آمل أن يتم إصلاح ذلك قريبًا.

الحل السريع الذي أجريته هو جعل ng-click يستخدم وظيفة محددة النطاق وإجراء فحص بنقرة مزدوجة على النحو التالي:

doubleClickCheck = false

$scope.toggleShowPct = ->
  if !doubleClickCheck
    $scope.showPct = !$scope.showPct
    doubleClickCheck = true

    $timeout ->
      doubleClickCheck = false
    , 100

coma شكرا لحل العمل الخاص بك. أنا أستخدم هذا مع عناصر القائمة التي تستخدم توجيه السمة "إغلاق القائمة". كيف يمكنني الحفاظ على هذه الوظيفة مع الحل الخاص بك؟

يا @ jbeuckm! لا أعرف هذا التوجيه ، هل يأتي شيء ما من مكتبة تمهيدية / مواد / مكتبة فاخرة؟

آه نعم أعتقد أنها تأتي من مكتبة فاخرة: أيونية. هذا هو التوجيه:

https://github.com/driftyco/ionic/blob/master/js/angular/directive/menuClose.js#L1

لدي أيضًا هذه المشكلة حيث في أي وقت اتصلت بوظيفة النطاق ، تم إطلاقها مرتين ، وعلى الرغم من أنه يمكنك القيام بحل بديل كما اقترح

لحسن الحظ ، اكتشفت أن المادة الزاويّة لها أسلوب النقر فوق Hijack ، ويمكنك إيقاف ذلك.

لتعطيل angular-mateiral click hijack ، تحتاج فقط إلى وضع هذا في ملف التكوين الخاص بك:

.config(function( $mdGestureProvider ) {
    $mdGestureProvider.skipClickHijack();
  });

لقد قمت باختبار هذا الحل ويبدو أنه يحل المشكلة. ومع ذلك ، لقد جربته فقط بنقرة نانوغرام. لست متأكدًا من كيفية تأثير ذلك على أي إيماءات مادية زاوية أخرى ، ولكن في الوقت الحالي ، يتم استدعاء وظائفي مرة واحدة فقط :)

نفس المشكلة هنا أيضًا.

انا املك

لقد جربت الكثير من العمل ولكن لم يحالفني الحظ. إنه مانع في قسم معين من التطبيق الذي أقوم بتطويره حاليًا :(

DaDanny شكرا جزيلا! جربت ما تقوله وهو يعمل !!

بعد تمكين هذا المكون الإضافي ، لدي مشكلة في Android (تم اختباره في 4.2.2 و 4.4.4) عندما أنقر على تغييرات تخطيط الزر ، يتم إطلاق حدث نقر آخر يوجهني إلى موقع آخر. عندما أزلت تطبيق البرنامج المساعد يعمل كما هو مفترض.

sterichards و Grzegorzsa : هل

إذا كان لديك ولا تزال الوظيفة تعمل مرتين ، فتأكد من عدم وجود كليهما

<ion-view ng-controller="MyCtrl">

</ion-view>

وشيء من هذا القبيل

.state('mystate', {
        url: '/myState',
        templateUrl: 'routes/myview.html',
        controller: 'MyCtrl'
      })

سيؤدي هذا إلى تحميل وحدة التحكم مرتين مما قد يتسبب أيضًا في حدوث هذه المشكلة.

أود أولاً التأكد من أن هذا ليس هو الحال ، ثم تنفيذ الحل أعلاه.

في صحتك واسمحوا لي أن أعرف إذا كان ذلك يساعد :)

لقد أجريت بعض التغييرات على ngTouch وهو يعمل مع مشروع الهاتف المحمول الخاص بي.
أعتقد أن هناك بعض الأخطاء في وحدة ngTouch.

يحاول ngTouch بشكل أساسي تشغيل حدث النقر بحدث اللمس وتجاوز حدث النقر.
ولكن على الجهاز الذي يعمل باللمس في حدث اللمس ، يفشل في التحقق أولاً من موضع x و y.

بالإضافة إلى ذلك ، إذا كنت تعمل باللمس> تحرك> إنهاء ثم انقر مرة أخرى على موضع اللمس الأول ، يمكنك النقر مرتين!
يحدث هذا عندما تلمس مرة أخرى في وقت PREVENT_DURATION (الافتراضي 2500 مللي ثانية).
لذلك أضفت حدث touchmove لإعادة تعيين هذا عند اللمس.

على أي حال ، أتمنى أن يساعد هذا شخص ما.

diff --git a/src/ngTouch/directive/ngClick.js b/src/ngTouch/directive/ngClick.js
index f352c25..ba74248 100644
--- a/src/ngTouch/directive/ngClick.js
+++ b/src/ngTouch/directive/ngClick.js
@@ -126,13 +126,14 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
     }

     var touches = event.touches && event.touches.length ? event.touches : [event];
+    var realTouch = touches != [event]; // check this is a real touch event
     var x = touches[0].clientX;
     var y = touches[0].clientY;
     // Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label
     // and on the input element). Depending on the exact browser, this second click we don't want
     // to bust has either (0,0), negative coordinates, or coordinates equal to triggering label
     // click event
-    if (x < 1 && y < 1) {
+    if (!realTouch && x < 1 && y < 1) {
       return; // offscreen
     }
     if (lastLabelClickCoordinates &&
@@ -183,12 +184,18 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
     }, PREVENT_DURATION, false);
   }

+  // Global touchmove hander that removes touchcoordinates while moving
+  function onTouchMove(event) {
+    touchCoordinates = []; //reset touch zone
+  }
+
   // On the first call, attaches some event handlers. Then whenever it gets called, it creates a
   // zone around the touchstart where clicks will get busted.
   function preventGhostClick(x, y) {
     if (!touchCoordinates) {
       $rootElement[0].addEventListener('click', onClick, true);
       $rootElement[0].addEventListener('touchstart', onTouchStart, true);
+      $rootElement[0].addEventListener('touchmove', onTouchMove, true);
       touchCoordinates = [];
     }

wormkid - أواجه مشكلة في تحديد المشكلة هنا. هل من الممكن أن تقوم بإنشاء اختبار وحدة لتوضيح هذه المشكلة؟

petebacondarwin - يمكنك اختبار أو تنزيل http://zen-dev.pl/angular-test.html
إذا نقرت على نص رمادي يختفي ، سيحل الرابط أدناه مكانه ويتم تشغيله.
الارتباط خارج العرض الزاوي. عندما يكون الرابط داخل العرض ، كل شيء يعمل بشكل جيد.

petebacondarwin - لقد صنعت jsfiddle.
https://jsfiddle.net/rfz23qgm/5/
لا يمكنني إعادة إنتاج "النقر مرتين على النقر" على هذا الكمان ، ولكن يمكنني إعادة إنتاج "النقر مرتين بعد التمرير".
أنا أختبر مع iPhone Safari.

  1. اضغط في مكان ما.
  2. الانتقال إلى صفحة التمرير. (استمر بالضغط)
  3. إطلاق سراح.
  4. اضغط على هذا الموضع الذي تم إصداره.
  5. تحصل على رسالة مزدوجة.

يجب عليك القيام بهذه الخطوة 5 في 2.5 ثانية.
يحدث ذلك عادة عند قراءة بعض قوائم اللوحات.
"اضغط - نقل - حرر - انقر على المقالة تحت إبهامك"

يجعل التمرير الزخم هذا بين المقالات المختلفة (عندما يكون موضع الإصدار هو نفسه موضع النقر الجديد)

واجهت مشكلة مماثلة باستخدام Angular Material's Bottom Sheet. لسبب ما ، كانت الأحداث المكررة touchstart تحدث في نفس الإحداثيات. أدى هذا إلى إضافة إدخالات مكررة إلى المصفوفة touchCoordinates ضمن ngClick ، مما سمح بنقرات "الخفية" لمتصفح سطح مكتب Chrome. لقد أوقفت هذه المشكلة مع هذا التغيير في طريقة ngClick لتوجيه onTouchStart :

@@ -172,6 +172,13 @@
     var y = touches[0].clientY;
     touchCoordinates.push(x, y);

+    // Test if these coordinates are already allowed. Don't stack!
+    for (var i = 0; i < touchCoordinates.length; i += 2) {
+      if (touchCoordinates[i] == x && touchCoordinates[i + 1] == y) {
+        return;
+      }
+    }
+
     $timeout(function() {
       // Remove the allowable region.
       for (var i = 0; i < touchCoordinates.length; i += 2) {

نظرًا لأن حل DaDanny لم ينجح بالنسبة لي ، فإليك حلًا آخر:

function onMyClick (e) {
  if (e.type !== 'click') {
    return;
  }
  // your stuff
}

يعد هذا ألمًا كبيرًا في المؤخرة لأن النقر فوق قائمة md ثم يركز على الإدخال الموجود تحتها. إنه يقودني للجنون ، فهل سنتوصل إلى حل قريبًا؟

تحاول حاليًا استخدام ngTouch في مكمل لدائرة ui-bootstrap.
بمجرد إضافة ngTouch إلى المشروع ، أحصل على مشكلة النقر المزدوج هذه والتي تجعل جميع عناصر التحكم مثل المدخلات أو تحديدها غير قابلة للاستخدام.

هل هناك أي عمل قيد التنفيذ يعمل على حل هذه المشكلة؟

تتمثل الخطة في إزالة ngClick من ngTouch والتوصية باستخدام fastclick.js بدلاً من ذلك.
أي تعليقات؟

همهمة ، fastclick يخلق مشاكل أخرى.
على سبيل المثال ، يتوقف ng-places-autocomplete عن العمل بشكل صحيح بمجرد إضافة fastclick.js إلى المشروع.

أتساءل عما إذا كان هذا خطأ يمكن إصلاحه في ng-places-autocomplete؟

لا شك أنه يمكن إصلاحه في ng-places-autocomplete.
ولكن ، إذا وجدنا مشكلة واحدة هناك ، فربما نجد نفس الشيء في صفحات واجهة المستخدم الأخرى.

فقط واجهت هذه المشكلة. يمكن تأكيد ذلك باستخدام ngTouch ، لأن إزالته تسببت في اختفاء المشكلة.

في حالتي ، سيؤدي النقر على ng في النهاية إلى إخفاء الأجزاء وعرضها ، مع إدخال الإدخال في الجزء الجديد الموجود في نفس الموقع حيث يؤدي النقر فوق ng إلى تشغيل لوحة المفاتيح.

حاولت الإصلاح المقترح من NorikDavtian بالإضافة إلى الكود هنا (https://github.com/angular/angular.js/pull/11342) دون جدوى.

في حالتي ، جاء الإصلاح بإضافة $ event.preventDefault () إلى زر ng-click على الزر حيث تم إنشاء الحدث.

نفس المشكلة ، ولكن تم حلها مع الحل المقدم من michaelyuen

<a data-ng-click="goTo($event, 'route/path')">Link</a>

$scope.goTo = function ($event, route) {
    $event.preventDefault();
    $location.url(route);
};

كان هذا الخطأ يحدث لي أيضًا. أحاول تحديث ng-touch إلى 1.4.8 ، وهو الحل الأخير ولكن لا يعمل.
حدث هذا في نافذة منسدلة صغيرة قمت بإصلاحها مع هذا.

scope.domFn = function($event, value) {
  // hack to fix bug with angular ngTouch
  if($event.type == "touchend") {return}
  someAwsomeStuff(value);
};

آمل أن يساعد هذا شخص ما.

Narretz من أين يمكنني الحصول على أحدث ملف مكتبة ngTouch باستخدام إصلاح ngClickOverride؟

التغيير في 1.5.0-rc.2. لذلك فهي ليست في أي فرع 1.4. هذا لأنه ليس إصلاحًا للأخطاء ، فقد قررنا ببساطة تعطيل التوجيه ngClick.override. يجب أن تكون قادرًا على استخدام ngTouch .5 مع 1.4

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات