2012-01-28 15 views
10

मेरे लिए वास्तविक सौदा समस्या को पकड़ या पास नहीं करता है, क्योंकि मेरे पास इसे हल करने के लिए कोई सुराग नहीं है।पहली बार jQuery ("पेस्ट") पर jQuery

मैंने लिखी jQuery स्क्रिप्ट को "पेस्ट" कार्रवाई पर इनपुट मान लेना चाहिए और उसे कोडिनेटर नियंत्रक को AJAX द्वारा पास करना चाहिए।

यह वास्तव में ठीक काम करता है, लेकिन केवल तभी जब मैं दूसरे (और आगे) समय के लिए मूल्य पेस्ट करता हूं। जब मैं कुछ div या अन्य DOM तत्व के लिए ("पेस्ट") को चालू करता हूं ("क्लिक करें)) पर यह ठीक काम करता है।

स्क्रिप्ट:

<script type="text/javascript"> 
$("#link").on("paste", function(){ 
$("#thumbs").empty().html("<p>loading</p>"); 
var postData = { 
    'url' : $("#link").val() 
}; 

$.ajax({ 
    type: "POST", 
    url: "/thumb/ajax/", 
    data: postData , //assign the var here 
    success: function(msg){ 
    $("#thumbs").html("Data Saved: " + msg); 
    } 

}); 

});

किसी भी मदद की सराहना की जाएगी

संपादित करें: एक और संकेत।

वैल() इस विशेष लिपि में वास्तव में पेस्ट एक्शन से पहले मूल्य लेता है। यदि मैं इस इनपुट में कुछ लिखता हूं, तो इसे हटा दें और कुछ और पेस्ट करें जो वास्तव में नियंत्रक को उस मूल्य को पास करेगा जो मैंने लिखा था, जिसे मैंने चिपकाया था।

EDIT2: ठीक है, मुझे यकीन है कि पेस्ट के साथ jQuery समस्या है।

<script type="text/javascript"> 

    $("#link").on("paste", function(){ 
     $("#thumbs").empty().html("<p>loading</p>"); 
     var postData = {'url' : $("#link").val() }; 
     $("#thumbs").html($("#link").val()); 
    }); 


</script> 

इस स्क्रिप्ट को इनपुट से div # अंगूठे में मूल्य जोड़ना चाहिए। यह पहली पेस्ट कार्रवाई के लिए नहीं है। दूसरे पर यह वास्तव में काम करता है।

EDIT3: मेरे दोस्त ने मुझे एक संकेत दिया। चालू ("पेस्ट") "पेस्ट" कार्रवाई पर सही काम करता है और पेस्ट वास्तव में किया जाता है। अगर कोई मुझे संकेत देता है कि पेस्ट के बाद मूल्य को पकड़ने के लिए टाइमआउट कैसे करना है, तो मैं आगे बढ़ सकता हूं।

उत्तर

21

समस्या हल हो गई।

जैसे कि मैंने पहले कहा, "पर (" पेस्ट ")" कार्रवाई सही वास्तविक पेस्ट पर किया जा रहा है। तो इनपुट को इनपुट में चिपकाए जाने से पहले कार्य किया जा रहा है। ऐसा इसलिए है क्योंकि पहली बार पेस्ट पकड़ते हैं और इनपुट के डिफ़ॉल्ट मान को पास करते हैं (मेरे उदाहरण के लिए शून्य)।

समाधान टाइमआउट सेट करने के लिए है। सही कोड ऐसा दिखता है और ठीक काम करता है।

$("#link").on("paste", function(){ 

setTimeout(function() { 
    $("#thumbs").html("<p>loading</p>"); 
    var postData = { 
     'url' : $("#link").val() 
     }; 
    $.ajax({ 
     type: "POST", 
     url: "/thumb/ajax/", 
     data: postData , //assign the var here 
     success: function(msg){ 
     $("#thumbs").html("Data Saved: " + msg); 
      $(".thumb").click(function(){ 
      (this).attr('id'); 


     }); 

     } 

    }); 
}, 500); 

});

समस्या हल हो गई, धन्यवाद @ 3nigma समर्थन के लिए।

+1

मेरी इच्छा है कि मैंने एक घंटे पहले इस पोस्ट को देखा होगा। Jquery मेरे जीवन के उस घंटे पहले मैं बस बर्बाद कर सकता हूं ^^ – azzy81

+1

आपको टाइमआउट सेट 0 के साथ भी ऐसा करने में सक्षम होना चाहिए। –

1

यह सिर्फ यहाँ ठीक काम करता है

DEMO

अद्यतन:

आप stringify करने के क्रम में यह सर्वर से भेजने के लिए वस्तु है, शामिल हैं json2.js अपने कोड

की तरह दिखाई देगा
$("#link").on("paste", function(){ 
$("#thumbs").empty().html("<p>loading</p>"); 
var postData = { 'url' : $("#link").val(), 'test' : 'testtest' }; 

    $.ajax({ 
     type: "POST", 
     url: "your/url", 
     data:JSON.stringify(postData), 
     success: function(msg){ 
     $("#thumbs").html("Data Saved: " ); 
     }   
     }); 
     }); 

यहां एक DEMO है जिसमें मैंने json2.js fr शामिल किया है ओम cdn

+0

मैं गहरी हो गया और POSTDATA को कोई चीज है जो अब इस तरह दिखता है कहा: वर POSTDATA = { 'url':। $ ("# लिंक") वैल(), 'परीक्षण': 'testtest' } ; पहले पेस्ट पर केवल 'परीक्षण' नियंत्रक के पास जा रहा है, [यूआरएल] खाली है। पता नहीं क्या समस्या है। – sznowicki

+0

@sznowicki उत्तर अपडेट देखें – Rafay

+0

मुझे ऐसा क्यों करना चाहिए? अगर मैं ("पेस्ट") को चालू करता हूं ("क्लिक करें") यह हर बार ठीक काम करता है। यह इनपुट मूल्य को नियंत्रक को सही तरीके से पास करता है। अगर मैं गलत हूं तो मुझे सही करें। – sznowicki

1

मैं 'ऑनपूट' का उपयोग करके समाप्त हुआ, जो तब तक ठीक काम करता है जब तक आपको IE8 या नीचे का समर्थन करने की आवश्यकता न हो।

+0

यह मेरे लिए धन्यवाद @Roger –

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