5

के साथ संघर्ष करता है मैं jQuery Context MenujQuery Draggable पंक्तियों के साथ jQGrid में पंक्तियों का प्रयास कर रहा हूं।jQuery संदर्भ मेनू jQuery ड्रैगगेबल

मेरी समस्या यह है कि चूंकि मैंने jQuery Context Menu जोड़ा है, इसलिए ड्रैगगेबल एक्शन एक क्लिक (साथ ही साथ सामान्य ड्रैग) पर ट्रिगर किया जाता है। जब मैं मेनू प्राप्त करने के लिए एक पंक्ति पर राइट क्लिक करता हूं, तो यह थोड़ा अजीब लगता है, और उसके बाद इसे दूसरी पंक्ति (मेनू को छोड़ने के लिए) पर क्लिक करें और वह पंक्ति कर्सर के बाद शुरू होती है।

क्या इसे jQuery संदर्भ मेनू से निम्न स्निपेट में evt.stopPropagation(); के साथ करना है?

$(this).mousedown(function(e) { 
    var evt = e; 
    evt.stopPropagation(); 
    $(this).mouseup(function(e) { 
     e.stopPropagation(); 
     var srcElement = $(this); 
     $(this).unbind('mouseup'); 
     if(evt.button == 2) { 
      // Hide context menus that may be showing 
      $(".contextMenu").hide(); 

क्या ड्रैगगेबल या संदर्भ मेनू के बीच चयन करने के अलावा मैं इसके बारे में कुछ भी कर सकता हूं?

+0

पृष्ठ नहीं मिला ... –

उत्तर

9

मुझे एक संबंधित समस्या है - संलग्न संदर्भ मेनू के साथ खींचने योग्य आइटम हमेशा खींचने योग्य नहीं थे। मेरे मामले में एक ड्रैगगेबल आइटम (एक डीवी तत्व जिसमें एक बड़े युक्त div तत्व में तैरता है) संलग्न संदर्भ मेनू के साथ केवल एक बार खींचा जा सकता है - एक बार ड्रैग पूरा होने के बाद, जब तक आप युक्त div में क्लिक नहीं किया जाता तब तक आइटम ड्रैग करने योग्य नहीं था। संदर्भ मेनू के बिना लगभग समान ड्रैगगेबल आइटम हमेशा खींचने योग्य थे। कंटेनर पुनर्स्थापित ड्रैगगेबिलिटी पर क्लिक करने पर मुझे क्यों पता नहीं है, लेकिन यह लगातार जारी रहा।

अपने प्रश्न के लिए धन्यवाद मुझे सही दिशा में इशारा करते हुए, मैं संदर्भ मेनू कोड को देखा और इसे संशोधित, के रूप में इस प्रकार है जो मेरी समस्या का समाधान:

jQuery(this).mousedown(function(e) { 
    var evt = e; 
    if (e.button == 2) //Added to make this compatible with draggable 
     evt.stopPropagation(); 
    jQuery(this).mouseup(function(e) { 
     if (e.button == 2) //Added to make this compatible with draggable 
      e.stopPropagation(); 
     var srcElement = jQuery(this); 

e.button के लिए चेक जोड़ना == 2 राइट-क्लिक ईवेंट के प्रसार को रोकता है, और अब मेरे ड्रैगगेबल divs draggable रहें, और संदर्भ मेनू अभी भी काम करता है। मैंने अभी तक आईई 8 में इसका परीक्षण किया है, और मुझे नहीं पता कि यह आपकी समस्या का समाधान करेगा या नहीं, लेकिन मुझे यह जानने में दिलचस्पी है कि यह करता है या नहीं।

क्रोम के साथ == संपादित करें ==

कार्ल आर से

प्रति सुझाव संगतता के लिए:

jQuery(this).mousedown(function(e) { 
    var evt = e; 
    if (e.button != 2) return; //Added to make this compatible with draggable 
    evt.stopPropagation(); 
    jQuery(this).mouseup(function(e) { 
     e.stopPropagation(); 
     var srcElement = jQuery(this); 

मैं मोड बदल दिया है के रूप में उन्होंने सुझाव दिया, और यह सिर्फ इस तरह से IE8 में ठीक काम कर रहा है।

+1

यह क्रोम में मेरे लिए काम नहीं करता था। मैंने कोड को $ ($) में बदल दिया। Mousedown (function (e) { अगर (e.button! = 2) // ड्रैगगेबल { वापसी के साथ यह संगत बनाने के लिए जोड़ा गया; } 'और दूसरा बटन छोड़ दिया जांचें। ऐसा लगता है कि अब तक काम कर रहा है। –

4

मेरे पास एक ही समस्या थी और jquery.contextMenu.js से पहले दो * .stopPropagation() पर टिप्पणी की। सब कुछ ठीक से काम कर रहा है।

इस मामले में इन स्टॉप का एकमात्र संभावित उपयोग कुछ न्यूनतम प्रदर्शन के लिए हो सकता है। वास्तव में * .preventDefault() के साथ इन्हें बदलने से मुझे और अधिक समझ आएगी। क्या मैं कुछ भूल रहा हूँ?

+0

बिल बी के बजाए आपके समाधान ने मेरे लिए अजीब काम किया – HatSoft

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