jQuery क्लिक करें-मोबाइल में कई क्लिक रोकें




mobile onclick (4)

मैं अपने आईओएस / एंड्रॉइड ऐप के निर्माण के लिए फोनगैप का उपयोग कर रहा हूं - मूलतः एक रिमोट जो मेरे लैपटॉप के कीबोर्ड पर कुछ चाबियाँ लगा सकता है। (वीडियो प्लेबैक आदि को नियंत्रित करने के लिए)

इसके एक वेबपेज के बाद से, मेरे पास छवियाँ हैं जो मेरे लैपटॉप पर मेरे जावा सॉकेट सर्वर से कनेक्ट होने पर क्लिक करते हैं मैं सामना कर रहा हूँ मुद्दा है, हर बार मैं एक बटन क्लिक करें - बस एक बार (विराम बटन की तरह), मुझे 1 से अधिक अनुरोध जावा कंसोल में निकाल दिया गया है लेकिन यह तब होता है जब मैं अपने फोन पर क्लिक (स्पर्श) करूँगा जब मैं अपने लैपटॉप के ब्राउज़र में उसी की कोशिश करता हूं, तो यह अपेक्षा के अनुरूप व्यवहार करता है (केवल एक अनुरोध)।

मैं कई पदों के माध्यम से गया था, जहां सामान्य सलाह 'अनबंड ()' और 'ऑफ ()' का उपयोग करना है, लेकिन कुछ भी काम करने के लिए नहीं लगता है कोड स्निपेट नीचे है

$("#play").off().on('click',function(){
        //alert("Play");

    jQuery.ajax({
    type: "GET",
    async: true,
    url: 'http://'+ip+':10007/function=play?',
    success: function (msg) 
        {  },
    error: function (err)
        { }
    });
});

मैंने यह चेतावनी जांचने के लिए प्रयोग किया कि क्या ईवेंट एक से अधिक बार निकाल दिया जाता है। चेतावनी सिर्फ एक बार चली जाती है, जिसका अर्थ है, घटना को केवल एक बार निकाल दिया गया है। तो इसकी सिर्फ एक बार क्लिक करें (स्पर्श करें) => एक घटना => लेकिन कई अनुरोध!

मैं कोड के इस टुकड़े के साथ सर्वर प्रतिक्रिया की जांच कर रहा हूँ:

while(true) {                
      Socket sock = servsock.accept();                
      System.out.println("Connection from: " + sock.getInetAddress());                
      Scanner in = new Scanner(sock.getInputStream());                
      PrintWriter out = new PrintWriter(sock.getOutputStream());                
      String request = "";                
      while (in.hasNext()) {
          request = in.next( );                
          if (request.contains("function="))
          {
            inputLine = request.split("function=")[1];
            System.out.println ("^^^^^" + inputLine); 
            ...

जब मोबाइल से अनुरोध किया जाता है, तो आउटपुट तीन बार कंसोल में दिखाई देता है, लेकिन केवल एक बार जब मेरे लैपटॉप के ब्राउज़र से अनुरोध किया जाता है

मुझे समझ में नहीं आ रहा है कि क्यों और इसे कैसे रोका जा सकता है। कोई संकेत?


console.log("called") का प्रयोग करें कि कितनी बार बटन को बुलाया जा रहा है। क्रोम में आउटपुट देखने के लिए-> डेवलपर-> जावास्क्रिप्ट कंसोल के अंतर्गत है। alert("Play"); केवल एक बार चलाया जाएगा।


मेरे पास इसी तरह का एक अनुभव है जिसमें jQuery का उपयोग किया गया है जिसमें एक मॉडल को एक क्लिक में दो बार कहा जाता है। फिर मुझे एहसास हुआ कि समस्या यह है कि मैं अपने document.ready के बाहर घटनाओं को प्रारंभ करता हूं।

इन्हें कोशिश करें। तो होने के बजाय

$(function(){
    ...
});

$("#play").off().on('click',function(){
    ...
});

इसे इस तरह से आज़माएं:

$(function(){
    ...

    $("#play").off().on('click',function(){
        ...
    });
});

एक बार आप एक बार क्लिक ईवेंट को आग लगा सकते हैं .one () के बजाय .on () । यह सुनिश्चित करेगा कि घटना को एक बार निकाल दिया जाएगा। AJAX अनुरोध पूरा होने के बाद आप .one () फ़ंक्शन फिर से अटैच कर सकते हैं।

आपका कोड कुछ ऐसा दिखेगा:

function processOnce() {
    //alert("Play");

    jQuery.ajax({
        type : "GET",
        async : true,
        url : 'http://' + ip + ':10007/function=play?',
        success : function (msg) {
            $("#play").one('click', processOnce());
        },
        error : function (err) {}
    });
}

$("#play").one('click', processOnce());

एक और संभावित समाधान डिवाइस आरम्भ करने के लिए इंतजार करना है। तो आपके शरीर टैग में यह जोड़ें:

<body onload="onBodyLoad()">

और स्क्रिप्ट के लिए:

<script type="text/javascript">
   function onBodyLoad() {
      document.addEventListener("deviceready", onDeviceReady, false);
   }

   function onDeviceReady() {
      $(function() {
         // bind your elements
      });
   }

अंत में आप यह निर्धारित करने के लिए एक ध्वज जोड़ सकते हैं कि कोई क्लिक पहले से हुआ है या नहीं। तो आपका कोड ऐसा दिखेगा:

var clicked = false;

$("#play").on('click', function () {
    if (clicked)
        return;

    clicked = true;
    //alert("Play");

    jQuery.ajax({
        type : "GET",
        async : true,
        url : 'http://' + ip + ':10007/function=play?',
        success : function (msg) {
            clicked = false;
        },
        error : function (err) {}
    });
});

आशा है कि ये आपकी मदद करेगा।


हो सकता है कि आपने पहले से ही इन समाधानों की कोशिश की है लेकिन अगर आपने नहीं किया है,

  1. $("#play").off('click'); डाल करने का प्रयास करें $("#play").off('click'); ~off().on('click')~ बजाय कॉलबैक फ़ंक्शन (सफलता या पूर्ण) में ~off().on('click')~

  2. return false; जोड़ें return false; कॉलबैक के लिए







phonegap-build