جيريري مخفية الحقل غير قابل للوصول حتى $ (المستند). Ready () يسمى

StackOverflow https://stackoverflow.com/questions/997296

سؤال

(تجميعها من سؤال آخر)

JQuery 1.3.2 رمز الاختبار، تشغيل في FF3:

<input type="hidden" value="236434" id="ixd" name='ixd' />

<script>
console.log( $('#ixd').val() );

console.log( $('#ixd') );
console.log( $("input[name='ixd']") );
console.log( $("input:hidden") );

console.log( $("input[name='ixd'][type='hidden']") );
console.log( $("input[name='ixd']").val() );

$(document).ready(function() {
    console.log( $('#ixd').val() );
    console.log( $('#ixd') );
    console.log( $("input[name='ixd']") );
    console.log( $("input:hidden") );
});
</script>

خرج وحدة التحكم:

undefined
[]
[]
[]
[]
undefined
236434
[input#ixd 236434]
[input#ixd 236434]
[input#ixd 236434]

هل يمكن لأي شخص أن يقدم أي روابط تفسير أو وثائق لبيانات الحقول الخفية لا يمكن الوصول إليها إلا بعد $ (المستند). Ready ()؟ إنه ليس شيئا ما واجهته على الإطلاق ويثبت أنه مزعج.

هل كانت مفيدة؟

المحلول

على عكس ما كتبه الآخرون، يجب أن يعمل مثالك لأن جميع المتصفحات الرئيسية تسمح بالوصول إلى العناصر التي تسبق كتلة البرنامج النصي المنفذ. ليس لدي firebug مثبتة، ولكن عند الاستعاضة عن console.log() مع document.writeln(), ، مثالك يعمل كما هو متوقع.

ماذا يحدث عند إنشاء مستند HTML التالي:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<input type="hidden" value="236434" id="ixd">
<pre><script type="text/javascript">
document.writeln($('#ixd').val());
document.writeln(document.getElementById('ixd').value);
</script></pre>

نصائح أخرى

حسنا، أعتقد أنك أجبت على سؤالك الخاص. باستخدام Document.getelementByID () يحتاج إلى تحميل شجرة DOM بواسطة المتصفح من أجل DOM API (والذي يتضمن GetEllementByID) للعمل.

هذا يعني أنه لا يمكنك التأكد من أن أي مكالمة GetElementByid ستعمل بشكل صحيح حتى يتم استدعاء الدالة $ (المستند). الدفع http://dean.edwards.name/weblog/2005/02/ORord-Of-Events/ للمزيد من

Document.Ready عندما تكون الصفحة "جاهزة"، وهذا يعني تقديمه بالكامل. ربما لم يتم تقديم حقلك المخفي في الصفحة حتى الآن في الوقت الحالي في سجل البدء.

استخدم جاهزا () لبدء التعامل مع عناصر الصفحات، وليس قبل ذلك، "إنها الطريقة الوحيدة للتأكد من" :)

إذا كنت تأخذ التعليمات البرمجية الخاصة بك (وإضافة jquery أعلاه)، أحصل على نفس الإخراج. ولكن إذا قمت بتغيير الرمز الخاص بك إلى ما يلي، فسوف يخرج النتائج الصحيحة. تخميني هو أن فايرفوكس يوزع HTML بترتيب مختلف عند عدم تقديم أي HTML / Head / Body.

<html>
<head>
<script type="text/javascript" src="jquery-1.3.2.js"></script>
</head>
<body>
<input type="hidden" value="236434" id="ixd" name='ixd' />

<script>
console.log( $('#ixd').val() );

console.log( $('#ixd') );
console.log( $("input[name='ixd']") );
console.log( $("input:hidden") );

console.log( $("input[name='ixd'][type='hidden']") );
console.log( $("input[name='ixd']").val() );

$(document).ready(function() {
    console.log( $('#ixd').val() );
    console.log( $('#ixd') );
    console.log( $("input[name='ixd']") );
    console.log( $("input:hidden") );
});
</script>

</body>
</html>

ولكن، كما قيل أعلاه، انتظر أن تكون الوثيقة جاهزة قبل محاولة استرداد العناصر حسب المعرف.

يجب أن لا تثق بأي شيء حتى يكون Dom جاهزا. انها مجرد الأمور تعمل. هل لديك مشكلة في الانتظار حتى جاهزة؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top