2012-05-18 28 views
7

सतत् में अपेक्षा के अनुरूप IE के साथ काम करने के लिए मेरे कोड अपनाने छिपे हुए इनपुट मान सेट ...jQuery काम नहीं कर रहा IE7 और IE8

मैं एक छिपा हुआ div फ़ॉर्म से युक्त कुछ जानकारी को संपादित करने की है। जब उपयोगकर्ता संपादित करने के लिए आइटम का चयन करता है, तो यह div दिखाया जाता है और फ़ील्ड आइटम के लिए जानकारी के साथ आबादी में आते हैं। वह divs (सरलीकृत शब्दों में) इस तरह दिखता है:

<div id="editform"> 
<form action="" method="post" id="qform" name="qform"> 
    First param: <input name="field1" id="field1"/> <br/> 
    Second param: <input name="field2" id="field2"/> <br/> 
    ... 

    <input type="hidden" name="qid" id="qid" value=""/> 

    <img id="submit" src="..." alt="..." title="..." /> 
</form> 

मैं मूल्यों को फ़ील्ड में सेट करने के लिए jquery का उपयोग करता हूं।

function edit_item(item_id) { 
    item = get_item(item_id); //this will return a JS object 
    $('#field1').val(item.property1); 
    $('#field2').val(item.property2); 
    ... 
    $('#qid').val(item_id); 
    $('#submit').click(function() { 
     alert($('#qid').val()); 
     $('#qform').ajaxSubmit(); 
    }); 
} 

यह सब एफएफ, ओपेरा, वेबकिट और IE 9 में ठीक काम करता है IE7 और IE8 में, हालांकि, मैं एक अजीब समस्या आ रही है: संपादन div खोलने के लिए मेरे समारोह कुछ इस तरह लग रहा है। मैं item_id को edit_item फ़ंक्शन में सही ढंग से सेट किया जा रहा हूं, हालांकि जैसे ही कार्य पूरा हो जाता है, छुपा इनपुट मान (qid) खाली स्ट्रिंग पर रीसेट हो जाता है। जब फॉर्म अजाक्स-सबमिट किया जा रहा है, तो अलर्ट सही तरीके से सेट होने के बावजूद मान को खाली स्ट्रिंग के रूप में दिखाता है। दिलचस्प बात यह है कि अन्य सभी फ़ील्ड ठीक हैं। और यह आईई 9 में सही ढंग से काम करता है।

मुझे यहां क्या याद आ रही है? अग्रिम में बहुत धन्यवाद।

+1

आईडी HTML विनिर्देश में अद्वितीय होना भी आवश्यक है। आपके पास "# field1" के गुणक हैं। इसके अलावा, आईडी हैश चिह्न से शुरू नहीं हो सकती है। देखें: http://stackoverflow.com/questions/448981/what-characters-are-valid-in-css-class-names –

+0

टिप्पणी के लिए धन्यवाद, हालांकि यह समस्या नहीं है। मेरे असली कोड में दोनों मान्य हैं: प्रश्न के लिए सरलीकृत कोड बनाते समय अद्वितीय आईडी और कोई हैश साइन - टाइपो। –

+0

शायद edit_item फ़ंक्शन को गलत item_id पैरामीटर के साथ एक बार निकाल दिया गया था? क्या आपने अलर्ट (item_id) जोड़ने की कोशिश की है; edit_item फ़ंक्शन के लिए लाइन? – Serhiy

उत्तर

22

यह पूरी तरह बेवकूफ है, और यह मामला है, तथापि नहीं होना चाहिए:

$('#field1').val(item.property1); 

काम नहीं किया। फिर भी

$('#field1').attr("value", item.property1); 

ठीक काम किया। मैं इसे छोड़ रहा हूँ। शुद्ध जावास्क्रिप्ट में JQuery के बिना IE के लिए

+8

कुछ समय ब्राउज़र डिजाइनरों/डेवलपर्स को भयानक बनाने में गर्व महसूस करते हैं .. !! ! – Misam

+0

@ मिसम मुझे इसके बारे में बताएं :) –

+0

आईई 8,9,10 में मेरे लिए कोई भी काम नहीं करता है :( – NullPointer

1

समाधान नहीं लगती है जटिल:

document.getElementById(id).setAttribute('value', value); 
+0

वाह, यह क्यों काम करता है और नियमित el.value = मूल्य वाक्यविन्यास नहीं? –

1

Aleks जी के जवाब के अलावा, मुझे पता चला है कि value विशेषता में छिपा तत्व में परोक्ष रूप से परिभाषित नहीं किया जाना चाहिए IE8 में समस्या के बिना jQuery .setAttr() और .val() के लिए आदेश।

अधिक जानकारी के लिए यहाँ देखें: jQuery .val() setter not working?