2013-03-08 8 views
5

पर बनाए गए तत्वों के माध्यम से Jquery लूपिंग मेरे पास एक सूची है जो किसी पृष्ठ पर पास की जाती है और तत्व रनटाइम पर बनाए जाते हैं। मैं इन तत्वों के माध्यम से लूप करना चाहता हूं और प्रत्येक तत्व के लिए कुछ क्रियाओं को पूर्ववत करना चाहता हूं। नीचे मेरा कोड है: इस सूची से बनाए गए प्रत्येक व्यक्ति के लिए मैं उस व्यक्ति पर एक चेक पूर्ववत करना चाहता हूं। कोई मेरी मदद कर सकते मैं केवल जांच एक बार हो रहा हो रही है:रनटाइम

jQuery:

$(document).ready(function() { 

    $("#userId").each(function(i){ 
     if ($("#userId").val != '') { 
      alert('not null' + i); 
     } 
    });     
}); 

JSP:

<c:forEach items="${person}" var="person"> 

<input= type="text" id="userId" value="${person.userid}" /> 
    First name:- ${person.fName} , Last Name:- ${person.lName} 
</c:forEach> 
+1

jQuery चयनकर्ता के रूप में आईडी चयनकर्ता कहता है: * दिए गए आईडी विशेषता के साथ एक एकल तत्व का चयन करता है। * यही कारण है कि आप केवल एक बार चेक प्राप्त कर रहे हैं। – EmCo

उत्तर

5

आप एक ही id विशेषता के साथ एक पृष्ठ पर कई घटक नहीं हो सकता। इसके बजाए कक्षाओं का उपयोग करने का प्रयास करें।

की तरह कुछ प्रयास करें:

$(document).ready(function() { 

    $(".userId").each(function(i){ 
     if ($(this).val() != '') { 
      alert('not null' + i); 
     } 
    }); 
}); 

नोट करने के लिए एक और बात एक तरीका है कि .val है, तो आप मूल्य प्राप्त करने के लिए यह कॉल करने की आवश्यकता है। .val के बजाय .val() का उपयोग करें। चूंकि आपके पास अब आपका कोड है, $ (selector) .val एक फ़ंक्शन है, इसलिए यह कभी भी खाली स्ट्रिंग नहीं होगी जिसका आप परीक्षण कर रहे हैं।

इसके अलावा अपने JSP तरह कुछ किया जाना चाहिए:

<c:forEach items="${person}" var="person"> 

<input= type="text" class="userId" value="${person.userid}" /> 
    First name:- ${person.fName} , Last Name:- ${person.lName} 
</c:forEach> 
3

आपका पाश, एक ही आईडी से कई तत्व बनाने पहला यह है कि बदल जाएगा। इसके बजाए कक्षा के नामों का उपयोग करना बेहतर है।

<c:forEach items="${person}" var="person"> 

    <input= type="text" class="user" id="userId-${person.userid}" value="${person.userid}" /> 
     <!--   ^Use Class &^Id to uniquely identify the user --> 
     First name:- ${person.fName} , Last Name:- ${person.lName} 
</c:forEach> 

इसके बाद आप .find() का उपयोग भी गतिशील रूप से उत्पन्न तत्व को खोजने के लिए कर सकते हैं। लेकिन मैं class विशेषता का उपयोग करके अपने समाधानों का उपयोग करने की सलाह देता हूं।

$(".user").each(function(i) { 
    if ($(this).val() != '') { 
      alert('not null' + i); 
    } 
}); 
+0

'.find' गतिशील रूप से जोड़े गए तत्वों के साथ कुछ भी करने के लिए नहीं है। यह मिलान किए गए तत्वों के वर्तमान सेट के वंशजों को खोजने का एक तरीका है। – Andbdrew

+0

@Andbdrew, असल में यह करता है। कृपया इसे सत्यापित करने के लिए जांचें '.ind()' डीओएम में नए जोड़े गए तत्व पा सकते हैं। (क्या आपने मुझे उस कारण से नीचे गिरा दिया?) – Starx

+0

यह आपके उत्तर को कम करने के कारण से संबंधित है, लेकिन अन्य कारण भी हैं।ओपी इन तत्वों पर क्लिक इवेंट संलग्न नहीं करना चाहता, इसलिए आपकी स्क्रिप्ट प्रश्न का उत्तर नहीं देती है। इसके अलावा, यहां देखें। Http://indi.jquery.com/find/ यहां देखें। गतिशील रूप से घटनाओं को जोड़ने के साथ इसका कोई लेना-देना नहीं है। यह आपको अपने वर्तमान मिलान किए गए सेट में खोज करने की अनुमति देता है। ऐसा नहीं है कि खोज के बारे में आपका बयान गलत था, इस मुद्दे के साथ इसका कोई लेना-देना नहीं है। क्या यह आपको समझ में आता है? – Andbdrew

2

रूप @Andbdrew ने कहा, एक आईडी के बजाय एक वर्ग का उपयोग करें, यह पाता है के बाद पहली आईडी से मेल खाता है के रूप में यह अधिक मदों की तलाश में बंद हो जाएगा।

इसके अलावा, आप हमारे कार्य के अंदर $("#userId") के बजाय this का उपयोग करना चाहेंगे।

तो कुछ इस तरह करते हैं:

$(".userClass").each(function(i) { 
    if ($(this).val() != '') { 
     alert('not null' + i); 
    } 
}); 
+0

'.val' एक विधि है और इसे – Andbdrew

+0

कहने की आवश्यकता है। टाइपो के लिए खेद है! – krillgar

1

आप jQuery द्वारा टैग के साथ क्यों न चुनें। आगे अगर आप आदानों है टीडीएस में आप

के रूप में चयन में गहरी जा सकते हैं

$("#tblUsers tr").each(function(i){ 
     alert('td' + i); 
}); 

: उदाहरण के लिए तत्व अपनी उपयोगकर्ता सूचियां होने आईडी tblUsers के साथ एक मेज है, तो आप के ऊपर क्रम उत्पन्न टीआरएस या TDs निम्नलिखित के रूप में कर सकते हैं itereate

$("tblUsers tr td input")