سؤال

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

أعتقد أنني قمت بالتقاط الكائن باستخدام كتلة تعليمات برمجية لـ ASP، ولكن المشكلة في ذلك هي أنه عند تحميل الصفحة لأول مرة، لا يكون فهرس تحرير الصف موجودًا ويؤدي إلى حدوث خطأ.وضع الكتلة داخل أ IF البيان أيضا لا يعمل.

$(document).ready(function() //when DOM is ready, run containing code
{
    <% if (grvTimeSheets.EditIndex > -1) {%>
        $(#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>).change(function() {
             $(#<%= grvTimeSheets.ClientID %>).block({ message: null }
        });
}
);
<% } %>

إنها إحدى المحاولات التي قمت بها، وحاولت أيضًا وضع كود ASP الخاص ببيان IF خارج كتلة JavaScript.لا يعمل أيضا.

كيف يمكنني تطبيق حدث jQuery على صندوق الإسقاط؟من الناحية المثالية موجزة قدر الإمكان.


شكرا على الإجابة ولكن كلا، لا يعمل :(.يبدو أن كود JavaScript لا يتم إخراجه...مربك...

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="jquery.blockUI.js"></script>
<script type="text/javascript">
    $(document).ready(function() //When DOM is ready, run the containing code
    {

    }
    );
</script>

هو الإخراج.على الرغم من أن هذا هو الرمز:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="jquery.blockUI.js"></script>
<script type="text/javascript">
    $(document).ready(function() //when DOM is ready, run containing code
    {<% if (grvTimeSheets.EditIndex > -1) {%>
        var id = '#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>';
        $(id).change(function() {
             $(id).block({ message: null }
        });
     <% } %>
    }
    );
</script>

لقد كان يفعل ذلك من قبل أيضًا، مما دفعني إلى الجنون.


آسف، هل يمكن أن تجعل ذلك أكثر وضوحا قليلا.لقد حاولت تحديد كل شيء في الكود خلفه كما يلي:

DropDownList ddl (DropDownList)grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients");
if (ddl != null)
{
    ClientScriptManager csm = Page.ClientScript;
    Type cstype = this.GetType();
    String csname1 = "PopupScript";

    string script = @"
    <script language='javascript' type='text/javascript'>
    $(#" + ddl.ClientID + ").change(function() { $(" + grvTimeSheets.ClientID + ").blockUI({ message: null }});} </script>";
          csm.RegisterStartupScript(cstype, csname1, script, true);
}

هل هذا ما قصدته؟

راجع للشغل، ما ورد أعلاه لم ينجح.لا توجد أخطاء، فقط لم تنجح أي أحداث.

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

المحلول

زوجان من الأشياء هنا.

  1. تحتاج إلى تغليف المحددات الخاصة بك بين علامتي اقتباس عند تمريرها إلى ملف $() وظيفة.يُنشئ مقتطف الشفرة أعلاه شيئًا مثل $(#some-generated-id), ، والذي لن ينجح.
  2. قوس الإغلاق المتعرج من جانب الخادم الخاص بك إذا كان البيان خارج وظيفة onready.يجب أن تكون متداخلة على نفس مستوى الفتحة if.

جرب هذه:

$(document).ready(function() //when DOM is ready, run containing code
{
  <% if (grvTimeSheets.EditIndex > -1) {%>
      var id = '#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>';
      $(id).change(function() { 
           $(id).block({ message: null }
        }); 
 <% } %>
}
);

إذا لم ينجح الأمر، فاستمر والصق ملف جافا سكريبت الذي تم إنشاؤه أيضًا.

نصائح أخرى

استخدم هذا:

cs.RegisterClientScriptBlock(cstype, csname, cstext2.ToString(), False)

وهذا غير صحيح لعدم خلق العلامات النصي منذ كنت إدراجها. وثائق MSDN خاطئة في الكيفية التي يفسر العلم.

وبالإضافة إلى ذلك، وضعت للتو ال معرف العميل من التحكم الخاصة بك إلى متغيرات منفصلة من التعليمات البرمجية خلف، وليس مسج كود .

وثم استخدام المتغيرات التي تحتوي على هويات بدلا من ذلك في كود مسج.

وداخل كتلة السيناريو الخاص بك التي تقوم بإنشائها في التعليمات البرمجية خلف:

string script = @"<script type=text/javascript> var myControlId = '" + ddl.ClientId  "';") + "</script>"

وأنا لم تحقق هذا النحو، ولكن يجب أن تكون قريبة. يمكنك إضافة جملة إضافية لgrvTimeSheets.ClientID نفسك. إذا كنت تحصل على هذا العمل فإنك قد ترغب في تغييره لبناء مجموعة وجافا سكريبت وتخزين ClientId وبهذه الطريقة، ثم لديك فقط متغير جافا سكريبت عالمي واحد التي تحتاج إلى التعامل معها.

وثمة خيار آخر هو مجرد إعطاء العنصر كنت تبحث عن اسم الفئة التي تصف سلوكها. ثم يصبح كود مسج واضح حقا:

$(function() {
    $("select.yourMarkerClass").change(....);
});

وإذا كان هناك أي صف تحرير، ثم هذا الرمز لا يفعل شيئا. إذا كان هناك عنصر يطابق محدد، ستحصل اضاف السلوك الجديد.

إذا كنت لا تستخدم نفس ID مكان آخر على الصفحة، يمكنك إحباط ASP. UniqueID NET الصورة مع واحد من المنتخبات المتقدمة مسج على:

$('[id$=ddlClients]')

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

وانظر <م> المختارون لمزيد من الأمثلة.

لقد استخدمت Page.ClientScript خاصية لتسجيل كتلة البرنامج النصي لاحتواء أي معرف أحتاج للوصول إليه باستخدام jQuery.

فيما يلي مثال لجافا سكريبت الخاص بي في ملف خارجي:

var myFancySelector = '#' + myControlId;
selectedValue = $(myFancySelector).val();

يتم تعريف myControlId من الكود الموجود خلفه ويتم تسجيله في ClientScriptBlock.

والمفتاح يمكن أن يكون أي شيء تريده، وينبغي أن تكون فريدة من نوعها بالرغم من ذلك.

وسأحاول أكثر بعد عطلة نهاية الأسبوع. وكان هذا الرمز، على الرغم من:

DropDownList ddl = (DropDownList)grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients");
if (ddl != null)
{
    ClientScriptManager csm = Page.ClientScript;
    Type cstype = this.GetType();
    String csname1 = "PopupScript";

    string script = @"
    <script language='javascript' type='text/javascript'>
    jQuery(#" + ddl.ClientID + ").change(function() { $(" + grvTimeSheets.ClientID + ").blockUI({ message: null }});} </script>";
    csm.RegisterStartupScript(cstype, csname1, script, false);

ولأن لديك المنسدلة في كل صف. وسيكون لكل المنسدلة لديهم ClientId فريدة من نوعها، لذلك أقترح القيام بما اقترح بن واستخدام محدد الدرجة لأنه هو أبسط حل.

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

وعذرا، وأرجو أن يكون قراءة الشفرة أقرب.

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