2012-12-01 18 views
7

मुझे एक साधारण JQuery मोबाइल ऐप में समस्या है। यह सब दो बार फायरिंग क्लिक घटना के लिए उबाल जाता है।jquery मोबाइल क्लिक घटना दो बार आग लगती है

इसी समस्या का कोई समाधान इस मुद्दे को हल नहीं कर पाया है।

समस्या तब होती है जब डिवाइस पर तैनाती या ब्राउज़र में प्रदर्शित होता है।

यहाँ कोड

<title></title> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<meta name="viewport" content="width=device-width, user-scalable=no" /> 

<script src="jquery-1.8.2.min.js" type="text/javascript"></script> 
<script src="jquery.mobile-1.2.0.min.js" type="text/javascript"></script> 
<script src="cordova-2.2.0.js" type="text/javascript"></script> 

<script type="text/javascript"> 
    $(document).bind("mobileinit", function() { 
     $.support.cors = true; 
     $.mobile.allowCrossDomainPages = true; 
    }); 
</script> 

<link rel="Stylesheet" href="jquery.mobile-1.2.0.min.css" /> 

<div> 
    <input type="button" id="ButtonSubmit" value="Save" /> 
</div> 
0 है

<script type="text/javascript"> 


    $("#ButtonSubmit").click(function() { 
     alert('Clicked'); 
    }); 

</script> 

+0

यहां जीतने का उत्तर मेरे लिए काम करता है: https://stackoverflow.com/questions/12052132/jquery-mobile-click-event-binding-twice – DOK

उत्तर

3

आप हल कर सकते हैं कि नीचे का उपयोग करके जिस तरह से उल्लेख किया है।

उपयोग सबसे पहले अनबाइंड और फिर बाँधनीचे की तरह:

<script type="text/javascript"> 

    $("#ButtonSubmit").unbind('click').bind('click', function() { 
      alert('Clicked'); 
      return false; //to prevent the browser actually following the links! 
     }); 

</script> 

अद्यतन: आप पद्धति पर हो रही है तो फिर आप इस्तेमाल कर सकते हैं के रूप में नीचे है।

नोट: जब आप का उपयोग कर रहे बंद विधि यह पिछली क्लिक ईवेंट हैंडलर को हटाने है और पद्धति पर के साथ यह है कि यह 2 बार क्लिक होने की अनुमति नहीं देता है नई one.B'cos कहते हैं।

<script type="text/javascript"> 

$('#ButtonSubmit').off('click').on('click', function(){ 

    alert('Clicked'); 
    return false; //to prevent the browser actually following the links! 
}); 

</script> 
+0

+1 बहुत अच्छा। लेकिन यह क्यों हुआ? '.on ('क्लिक करें') क्यों दो बार निकाल दिया जाता है? – Omar

+0

@Omar Plz अधिक जानकारी के लिए मेरे अपडेट अनुभाग की जांच करें। – Sampath

+1

मेरे लिए काम नहीं है –

0

क्या आपने डिफ़ॉल्ट कार्रवाई को रोकने की कोशिश की?

<script type="text/javascript"> 
    $("#ButtonSubmit").click(function (e) { 
     e.preventDefault(); 
     alert('Clicked'); 
    }); 
</script> 
0

यदि आपका ऑनक्लिक हैंडलर दो बार फायरिंग कर रहा है तो संभवतः आपके हैंडलर को दो बार पंजीकृत किया जा रहा है। हैंडलर को पंजीकृत करने से पहले आप कुछ लॉगिंग जोड़ सकते हैं ताकि यह सत्यापित हो सके कि यह हो रहा है। फिर आप डीबग कर सकते हैं कि यह दो बार पंजीकृत क्यों हो रहा है। (लाइन # 2689)

2

प्रायोगिक सामग्री के बहुत सारे फायरिंग क्लिक घटनाओं के साथ नवीनतम jQuery मोबाइल, जो संभवत: इन मुद्दों खड़ी कर रहा है में चल रहा है:

// This plugin is an experiment for abstracting away the touch and mouse 
// events so that developers don't have to worry about which method of input 
// the device their document is loaded on supports. 
// 
// The idea here is to allow the developer to register listeners for the 
// basic mouse events, such as mousedown, mousemove, mouseup, and click, 
// and the plugin will take care of registering the correct listeners 
// behind the scenes to invoke the listener at the fastest possible time 
// for that device, while still retaining the order of event firing in 
// the traditional mouse environment, should multiple handlers be registered 
// on the same element for different events. 
// 
// The current version exposes the following virtual events to jQuery bind methods: 
// "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel" 

http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.js

तरह से मैं यह तय था:

$('#mobileMenuItem').off('click'); 

और फिर यह सामान्य रूप से काम करना शुरू कर दिया।

1

मुझे लगता है कि यह आपके ईवेंट को कैसे संभालने से संबंधित है। यानी पेजिनिट का उपयोग करना।

इसके अलावा विभिन्न डेटा-यूआरएल वाला एक पृष्ठ छुपाया जा सकता है, इसलिए वही जेएस भी इससे कोई फर्क नहीं पड़ता।

अपने कोड में, मैं निम्नलिखित परिवर्तन

<script type="text/javascript"> 
    $(document).off('click').on('click', '#ButtonSubmit', function() { 
     alert('Clicked'); 
    }); 
</script> 

इस तरीके में क्या करना होगा, मुझे पता है मैं एक बार के लिए बाध्य होगा।

संबंधित मुद्दे