سؤال

لقد العالمين أبسط وظيفة جافا سكريبت:

fnSubmit()
{
  window.print();
  document.formname.submit();
}

وهو ما يسمى من قبل:

<button type="button" id="submit" onclick="fnSubmit()">Submit</button>

كل ما هو جيد في مربع حوار الطباعة يظهر إلا بعد الطباعة أو إلغاء الطباعة أحصل على الخطأ التالي:

"الوثيقة.formname.يقدم ليست وظيفة"

النموذج على النحو التالي:(من الواضح أنا لا تستخدم formname في رمز الفعلي ولكن يمكنك الحصول على فكرة)

<form name="formname" id="formname" method="post" action="<?=$_SERVER['SCRIPT_NAME']?>">

ومن الواضح أنا لا أحاول أن تفعل أي شيء خاص هنا يجب استخدام نهج مماثلة في الماضي ، ما في العالم أنا في عداد المفقودين هنا ؟

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

المحلول

باختصار:تغيير معرف من زر إرسال إلى شيء مختلف عن "إرسال".أيضا لا تعيين اسم هذه القيمة أيضا.

الآن بعض أعمق.الحالة العامة هو أن document.formname.submit هو الأسلوب الذي عندما دعا ، سيتم إرسال النموذج.ومع ذلك ، في سبيل المثال ، document.formname.submit ليست الطريقة بعد الآن ، ولكن دوم عقدة تمثل زر.

يحدث هذا لأن عناصر النموذج كما تتوفر سمات من عقدة DOM, عبر name و id سمات.هذه الصياغة هو مربكا بعض الشيء, لذلك هنا يأتي مثال على ذلك:

<form name="example" id="example" action="/">
  <input type="text" name="exampleField" />
  <button type="button" name="submit" onclick="document.example.submit(); return false;">Submit</button>
</form>

على هذا المثال ، document.forms.example.exampleField هو دوم عقدة تمثل مجال مع اسم "exampleField".يمكنك استخدام شبيبة للوصول إلى خصائص مثل قيمته: document.forms.example.exampleField.value.

ومع ذلك, على سبيل المثال هناك عنصر من النموذج يسمى "إرسال" و هذا هو زر إرسال, التي يمكن الوصول إليها مع document.forms.example.submit.هذه الكتابة القيمة السابقة التي كانت الوظيفة التي تتيح لك إرسال النموذج.

تحرير:

إن إعادة تسمية المجال ليست جيدة بالنسبة لك ، هناك حل آخر.قبل وقت قصير من كتابة هذا تركت السؤال على الموقع و حصلت على رد في شكل أنيق جافا سكريبت هاك:

function hack() {
  var form = document.createElement("form");
  var myForm = document.example;
  form.submit.apply(myForm);
}

انظر كيفية موثوق تقديم نموذج HTML مع جافا سكريبت ؟ للحصول على تفاصيل كاملة

نصائح أخرى

وبالنظر إلى أن النموذج الخاص بك وعلى حد سواء id وname محددة، هل يمكن استخدام أي واحد من هؤلاء:

ومع form العلامة id ل:

document.getElementById('formname').submit();

مع السمة form العلامة name ل:

document.forms['formname'].submit();

وجرب هذا:

fnSubmit()
{
  window.print();
  document.getElementById("formname").submit();
}

والمذنب الأكثر احتمالا هو IE الخلط بين المتغيرات جافا سكريبت، هويات، والأسماء. بحث في المصدر لتقاسم اسم النموذج الخاص بك شيء.

  1. وضع زر الإدخال داخل النموذج الخاص بك.
  2. تعطي tabindex="-1" على ذلك.
  3. جعلها غير مرئية باستخدام style="display:none;".

مثل هذا

<input type="submit" tabindex="-1" style="display:none;" />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top