jQuery

2009-04-22 6 views
18

के साथ नई आईडी सेट करें "यह" एक टेक्स्ट फ़ील्ड है, "new_id" एक पूर्णांक है।jQuery

जब मैं निम्नलिखित स्निपेट लागू होते हैं:

$(this).attr('id', this.id + '_' + new_id); 
$(this).attr('name', this.name + '_' + new_id); 
$(this).attr('value', 'test'); 

आईडी परिवर्तन, नाम भी बदल जाता है, लेकिन नहीं मूल्य। यदि मैं यह करने के लिए अंतिम पंक्ति को बदलने

$('#mytextfield_3').attr('value', 'test'); 

यह काम करता है (और इसलिए एक स्ट्रिंग शाब्दिक उपयोग करें)।

कोई विचार?

- EDIT - त्वरित प्लगइन परीक्षण के लिए स्टीरपाइक के लिए धन्यवाद - मेरा मानना ​​है कि इसे काम करना चाहिए, लेकिन मुझे त्रुटि नहीं मिल रही है।

मैं क्लोन

clone = $(this).find('.clone_fields_container:first').clone(); 

"क्लोन" का उपयोग अब एक div जो इनपुट फ़ील्ड एम्बेडेड दी गई है बनाने के लिए:

यहां कुछ और कोड है।

एक नया आईडी जेनरेट करने के बाद:

/** Iterate over input and select fields in container */ 

    clone.children('input,select,textarea').each(function() { 
    $(this).attr('id', this.id + '_' + new_id); 
    $(this).attr('name', this.name + '_' + new_id); 
    $(this).val('test'); 
    console.log(this); 
    }); 

पाठ फ़ील्ड में कोई मान नहीं है।

+0

क्या यह अभी भी आपके द्वारा इसे बदलने के बाद दस्तावेज़ के लिए अद्वितीय है? – fredrik

+0

हाँ, मैंने इसे बदलने के बाद, यह अद्वितीय – schneck

उत्तर

22

मैं सिर्फ अपने ही स्निपेट का उपयोग कर एक परीक्षण चलाने के लिए एक त्वरित प्लगइन लिखा विशेषताओं की पूरी तरह से तैयार है और यह काम करता है ठीक

$.fn.test = function() { 
     return this.each(function(){ 
     var new_id = 5; 
     $(this).attr('id', this.id + '_' + new_id); 
     $(this).attr('name', this.name + '_' + new_id); 
     $(this).attr('value', 'test'); 
     }); 
    }; 

$(document).ready(function() { 
    $('#field_id').test() 
}); 

<body> 
    <div id="container"> 

    <input type="text" name="field_name" id="field_id" value="meh" /> 
    </div> 
</body> 

क्या होता है तो मैं केवल आपके कोड में कुछ और चल रहा है मान सकता हूं। क्या आप कुछ और विवरण प्रदान कर सकते हैं?

+1

आप सही थे, डिबगिंग की आधी रात के बाद मुझे पता चला कि एचटीएमएल() को सीधे नोड मैनिपुलेशन के साथ संपादित करना अच्छा नहीं है ... वैसे भी, आपका कोड मुझे समाधान में लाया, बहुत बहुत धन्यवाद। – schneck

0

EDIT: अपनी टिप्पणी के आधार पर और यह मानते हुए कि this क्लोन है।

$(this).clone() 
     .attr('id', this.id + '_' + new_id) 
     .attr('name', this.name + '_' + new_id) 
     .val('test') 
     .appendTo('#someElement'); 

पूर्ण उदाहरण

<script type="text/javascript"> 
    var new_id = 0; 
    $(document).ready(function() { 
     $('#container > input[type=button]').click(function() { 
      var oldinp = $('input#inp')[0]; 
      var newinp = $(oldinp).clone() 
            .attr('id',oldinp.id + new_id) 
            .attr('name',oldinp.name + new_id) 
            .val('test') 
            .appendTo($('#container')); 
      $('#container').append('<br>'); 
      new_id++; 
     }); 
    }); 
</script> 


<div id="container"> 
<input type="button" value="Clone" /><br/> 
<input id="inp" name="inp" type="text" value="hmmm" /><br/> 
</div> 
+0

दुर्भाग्यवश है, यह भी काम नहीं करता है। – schneck

+0

@TStamper: हाँ, मैं समझ गया, लेकिन यह काम नहीं करता है। @tvanfosson: आईडी से पहले मान बदलना यहां काम नहीं करता है, क्योंकि फॉर्म तत्व किसी अन्य तत्व का क्लोन है, इसलिए सबसे पहले इसे एक अद्वितीय आईडी प्राप्त करनी होगी। – schneck

+0

@schneck - मैंने तत्व को क्लोन करने के संबंध में अपना उत्तर अपडेट कर दिया है। – tvanfosson

1

आप

$(this).val('test'); 
बजाय

कोशिश की
$(this).attr('value', 'test'); 

val(), आम तौर पर आसान है के बाद से आपको जिस विशेषता को बदलने की आवश्यकता है वह अलग-अलग DOM तत्वों पर भिन्न हो सकती है।

0

जब आप में एक attr() command तो जैसे

$(this).attr({ 
       id : this.id + '_' + new_id, 
       name: this.name + '_' + new_id, 
       value: 'test' 
      }); 
0

.val()attr('value') का उपयोग करें।