جافا سكريبت تنشر بيانات النموذج في نافذة جديدة دون "الهدف"

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

سؤال

ماذا؟أود أن أكون قادرًا على تقديم طلب نشر (ليس من الضروري أن يكون بيانات نموذج) إلى نافذة جديدة دون استخدام السمة الهدف (التحقق من صحة XHTML).

لماذا؟لدي تطبيق ويب (باستخدام jQuery) حيث يختار المستخدم عددًا من الإدخالات لطباعتها.يجب إرسال كل معرف إدخال إلى صفحة المعالجة التي ستعرض نسخة قابلة للطباعة من الكل.لا أرغب في توجيه المستخدم بعيدًا عن تطبيق الويب للطباعة ولا يمكنني استخدام نافذة منبثقة لأن عدد معرفات الإدخال قد يصبح كبيرًا جدًا بحيث لا يتناسب مع عنوان URL.

لقد بحثت في Google وقرأت العديد من المنتديات ويبدو أن معظم الأشخاص يقترحون إما السمة المستهدفة مباشرةً أو إدراجها باستخدام JavaScript.كنت أتمنى تجنب هذين الحلين.

هل هذا ممكن حتى، وإذا كان الأمر كذلك، كيف؟

شكرا لك مقدما :)

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

المحلول

في Javascript، اعترض إرسال النموذج، واملأ نموذجًا ثانيًا بالحقول المخفية فقط التي تحتوي على القيم التي تريدها، ثم أرسل هذا النموذج بدلاً من ذلك.

نصائح أخرى

هذا ما target السمة ل.اضبطه على "_blank" لفتح نافذة جديدة.إذا كنت تريد أن يكون ترميزك صالحًا (ما الفائدة؟أؤكد لك أن المستخدمين لديك لن يهتموا كثيرًا بصلاحية الترميز الخاص بك!)، ثم استخدم Javascript لتعيين الهدف عند تحميل الصفحة...

window.onload = function() {
  document.forms[0].target = '_blank';
}

لا توجد وسيلة أخرى.

لاستهداف الجزء العلوي من الصفحة الحالية والخروج من أي مجموعة إطارات مستخدمة حاليًا، قد تستخدمها <a href="page.htm" target="_top"> في HTML.في جافا سكريبت تستخدم:

top.location.href = 'page.htm';

لاستهداف الصفحة أو الإطار الحالي يمكنك استخدامه <a href="page.htm" target="_self"> في HTML.في جافا سكريبت تستخدم:

self.location.href = 'page.htm';

لاستهداف الإطار الأصلي يمكنك استخدامه <a href="page.htm" target="_parent"> في HTML.في جافا سكريبت تستخدم:

parent.location.href = 'page.htm';

لاستهداف إطار معين ضمن مجموعة إطارات يمكنك استخدامه <a href="page.htm" target="thatframe"> في HTML.في جافا سكريبت تستخدم:

top.frames['thatframe'].location.href = 'page.htm';

لاستهداف إطار iframe محدد داخل الصفحة الحالية، يمكنك استخدامه <a href="page.htm" target="thatframe"> في HTML.في جافا سكريبت تستخدم:

self.frames['thatframe'].location.href = 'page.htm'; 

السمة target التابع <form> العنصر صالح في XHTML 1.0 انتقالية..

إذا كنت تستخدم XHTML 1.1 أو 1.0 Strict، فإن <iframe> ليست علامة صالحة في المقام الأول..

يمكنك استخدام Javascript window.open لفتح النافذة الجديدة واستخدام معلمات GET في عنوان URL لتمرير الوسائط...لكن IMO أسوأ من استخدام السمة المستهدفة في نوع الوثيقة الانتقالية.

أفضل طريقة للقيام بذلك هي نافذة جديدة "زائفة" يتم إنشاؤها بسرعة في DOM وتملأ نفسها عن طريق مكالمات AJAX.بهذه الطريقة لا "تكسر" تجربة المستخدم (عن طريق فتح نافذة جديدة).

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

$(function() {
    var $opener = $(window.opener.document);
    var entryIds = $opener.find("#entryIds").val();
    // do something with the ids
});  

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

إذا كنت تشعر بالمرح، فيمكنك دائمًا تعيين معرفات الإدخال في الجلسة أو ملف تعريف الارتباط (عبر مكالمة خدمة الويب) على الصفحة الافتتاحية قبل فتح النافذة الجديدة، والاستيلاء على الجلسة على الصفحة المفتوحة حتى تتمكن من إنشاء طباعة الصفحة على جانب الخادم بدلاً من ذلك.

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