2010-03-03 13 views
11

हैलो सब मैं एचटीएमएल ऑब्जेक्ट्स के साथ एचटीएमएल पेज पर, "क्लास। सक्रिय जोड़ना और बंद करना" ऑब्जेक्ट्स चालू कर रहा हूं, फॉर्म नहीं। और प्रत्येक क्लिक पर मैं कक्षा के साथ वस्तुओं की एक सरणी बनाना चाहता हूं। सक्रिय लेकिन मुझे कोई परिणाम नहीं मिल रहा है ?!एक फार्म के बिना serialize?

क्या यह सही दिशा में है?

var data = $('li.tagToggle.active').serializeArray(); 
// li id format is 'id_0001' 
alert(data) 
$.post("/scripts/php/process.php",{ 
     'data[]': data, 
     funcName : 'tagResults', 
     tagResults : '1' 
}) 

चेतावनी और खाली खिड़की रहता है, लेकिन जब मैं एक फार्म पर इस का उपयोग यह वर्ग .active

किसी भी संकेत दिए गए स्वागत करते हैं के साथ सभी वस्तुओं को पकड़ लेता है!

उत्तर

5

ठीक - यह काम करने के लिए गया लेकिन serialize के रूप में के रूप में साफ अपने वंचितों()

function getTags(){ 

    var data = []; 

    $('li.tagToggle.active').each(function(){ 
     var me = $(this); 
     var id = me.attr("id").split('_'); 
     data.push(id[1]) 

    }); 

    $.post("/scripts/php/process.php",{ 
     'data': data, 
     funcName : 'tagResults', 
     tagResults : '1' 
    }) 

} 

वहाँ एक बेहतर तरीका लगता है?

+0

मुझे यह पसंद है। data.push ऑब्जेक्ट बनाने के लिए एक अच्छा समाधान है, और इसे सबमिट करने के लिए आपके पास अन्य डेटा के साथ विलय करने में सक्षम होना है। –

+0

@daniel कृपया मेरा उत्तर जांचें और इसे स्वीकार करने पर विचार करें। – pepkin88

9

यह है कि मैं क्या आपके मामले में इसका इस्तेमाल करने के $ ('li.tagToggle.active')

(function($){ 
$.fn.serializeAny = function() { 
    var ret = []; 
    $.each($(this).find(':input'), function() { 
     ret.push(encodeURIComponent(this.name) + "=" + encodeURIComponent($(this).val())); 
    }); 

    return ret.join("&").replace(/%20/g, "+"); 
} 
})(jQuery); 

उपयोग कर रहा हूँ है serializeAny()।;

+3

यह एक अच्छा जवाब नहीं है। आप यह जांच नहीं रहे हैं कि किसी तत्व का नाम है या नहीं, यदि यह एक बटन है या यदि यह चेक किया गया चेकबॉक्स या रेडियो है। '.erializeArray' यह भी जांचता है कि कोई तत्व अक्षम है या नहीं। इसके अलावा आप अपने सरणी को पैरामीटर करने के लिए '$ .param' का उपयोग कर सकते हैं। – pepkin88

+3

कोई भी आसानी से आईएफ शर्त को जो कुछ भी चाहिए उसे पर्याप्त रूप से जोड़ सकता है। यहां तक ​​कि यदि तत्व अक्षम है, तो भी आपको इसे सर्वर पर भेजना चाहिए। आखिरकार यदि इसका चेकबॉक्स या रेडियो, .val() को अभी भी – fedmich

+0

को संभालना चाहिए, लेकिन यह अनचेक होने पर भी मूल्य भेजता है, इसलिए यह गलत काम कर रहा है। ओपी को फॉर्मों के मुकाबले अन्य तत्वों पर '.erialize' के प्रभाव में रूचि थी, इसलिए बेहतर '.erialize' के समान। आपका फ़ंक्शन लगभग कोई फ़िल्टर नहीं करता है और jQuery के 'serializeArray' के साथ क्या करता है इसकी तुलना में चेक करता है और आप बॉयलरप्लेट जोड़ते हैं, जिसे' $ .param 'द्वारा संभाला जा सकता है और इसे संभाला जाना चाहिए। यह केवल कुछ जटिल दिखता है, शुरुआती मूर्खों को कुछ सुरक्षित के रूप में इसके बारे में सोचने में मूर्ख बना सकता है।अच्छा, यह सुरक्षित नहीं है। यही कारण है कि मैंने आपका जवाब घटा दिया। – pepkin88

5

इस समारोह के साथ आप serializable तत्वों के किसी भी सेट कर सकते हैं:

function makeSerializable(elem) { 
    return $(elem).prop('elements', $('*', elem).andSelf().get()); 
} 

तो फिर तुम इसे इस तरह उपयोग कर सकते हैं:

var arr = makeSerializable('li.tagToggle.active').serializeArray(); 

या

var $elem = $('li.tagToggle.active'); 
var data = makeSerializable($elem).serialize(); 
6

आप को क्रमानुसार कर सकते हैं इस तरह के तत्व के अंदर सभी इनपुट:

var data = $('YourId :input').serialize() 
+2

कॉलन गलत जगह पर है। Var data = $ ('YourId: input') होना चाहिए। Serialize() –

1

में मामला किसी को इस सवाल पर आते हैं, इस लिंक पर एक ही सवाल है और समाधान jQuery to serialize only elements within a div

सवाल करने के लिए

$('li.tagToggle.active :input').serialize(); 

लिंक इस मामले में jQuery serialize

$('#divId :input').serialize(); 

उपयोग कर रहा है तो

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