2009-08-05 10 views
1

Ich habe jQuery in verschiedenen Dateien, und vor kurzem musste ich Elemente auf der Masterseite ändern. Dies hat dazu geführt, dass verschiedene Jaavscript-Includes nicht mehr funktionieren. Stackoverflow ist suggesting great ideas, um das Problem bezüglich des ID-Selektors zu lösen.jQuery.validate.js und asp.net Masterseiten

$("#ctl00_ContentMainPane_eliteUser").html 

Allerdings habe ich ein Problem, wo wir jquery.validate.js verwendet haben, Formular-Steuerelemente zu validieren, so dass es Code wie folgt in externen JS Dateien

$(document).ready(function(){ 
    $("#aspnetForm").validate({ 
     rules: 
    { 
     ctl00$ContentMainPane$txtFirstName: 
     { 
      required:true, 
      CheckAlfaNumeric:true 
     }, 
     ctl00$ContentMainPane$ctl00$ucRFI$txtComments: 
     { 
      required:true 
     }      

    }, 
    messages: 
    { 
     ctl00$ContentMainPane$txtFirstName: 
     { 
      required:" Please enter first name" 
     }, 
     ctl00$ContentMainPane$ctl00$ucRFI$txtComments: 
     { 
      required:" Please enter comments." 
     } 
    } 
    }); 
    $("#" + GetPlaceholder() + "txtFirstName").blur(function(){ 
      $("#" + GetPlaceholder() + "txtFirstName").valid(); 
    }); 
    jQuery.validator.addMethod("CheckAlfaNumeric", function(value, element) { 
      return this.optional(element) || /^[A-Za-z\ ]+$/i.test(value); 
    }, " Please enter alphabet."); 
}); 

Jede Idee, wie zu verhindern das Namensproblem von Attributen, wenn sich der Name aufgrund der Änderung der Masterseite ändert?

+0

Siehe meine Antwort [hier] (http://stackoverflow.com/questions/1232465/how-to-use-jquery-select-element-by-id-and-asp-net-without-putting -ctl00-everyw) – redsquare

Antwort

5

Warten Sie, .NET 4.0, die Sie genau festlegen können, wie die IDs aufgebaut werden sollte;)

Ernst: Sie AFAIK manuell Ihre Regeln erstellen können, wie etwas zu tun (ein JS Objekt ist nichts anderes als ein " Array“von Eigenschaften):

var myRules = new Object(); 
myRules[GetPlaceholder() + "txtFirstName"] = { required:true, CheckAlfaNumeric:true }; 

var myMessages = new Object(); 
myMessages[GetPlaceholder() + "txtFirstName"] = { required:"Please enter first name" }; 

$("#aspnetForm").validate({ rules: myRules, messages: myMessages }); 
+0

Es mag nur das .Net-Ophile in mir sein, aber kannst du "new Object()" hier zu einer stark typisierten Klasse machen? – digiguru

+0

nein, es gibt kein solches Konzept einer Klasse oder einen starken Typ dafür in JavaScript ... – veggerby

+0

Dude. Deine "myRules" und "myMessages" haben den Tag gerettet. Upvote. – granadaCoder

0

Meine Antwort ist meine Modifikation von Veggerby verwenden. Bitte upvote seine Antwort, nicht meine. Er rettete den Tag.

Ich setze meine Antwort hier, um eine leichte Einschränkung hinzuzufügen. (Ich benutze 'attr' ('name')). Und um zu zeigen, wie man es mit einer Dropdown-Liste macht.

Nicht gesehen ist, dass meine Inhaltsseite eine asp.net-Dropdown-Liste namens "ddlState" und "ddlFavoriteColor" hat. Ich habe einen Dummy "--Select--" -Wert oben in den Dropdown-Listeneinträgen platziert, also möchte ich etwas, wo der selectedIndex größer als Null ist.

Hinweis, dieses Projekt ist mit 3,5 "festgefahren". : < Ich hätte lieber etwas mit den coolen 4.0 Features gemacht.

Ja, mein "check" -Code könnte kleiner sein, aber für Web-Beispiele möchte ich kurz und prägnant sein, um zu zeigen, was vor sich geht.

function GetStateDropDownName() { 
    var cntlName = $("[id$=_ddlState]").attr("name"); 
    return cntlName; 
} 

function GetFavoriteColorDropDownName() { 
    var cntlName = $("[id$=_ddlFavoriteColor]").attr("name"); 
    return cntlName; 
} 

$(document).ready(function() { 

    jQuery.validator.addMethod("dropdownBoxHasItemSelected", function (value, select, arg) { 
     var returnValue = false; 
     var selectedIndex = $(select).prop("selectedIndex"); 
     if (selectedIndex != 0) { 
      returnValue = true; 
     } 
     return returnValue; 
    }, "Please select a item."); 


    var myRules = new Object(); 
    myRules[GetStateDropDownName()] = { dropdownBoxHasItemSelected: true }; 
    myRules[GetFavoriteColorDropDownName()] = { dropdownBoxHasItemSelected: true }; 

    var myMessages = new Object(); 
    myMessages[GetStateDropDownName()] = { dropdownBoxHasItemSelected: "Please select a State." }; 
    myMessages[GetFavoriteColorDropDownName()] = { dropdownBoxHasItemSelected: "Please select a Favorite Color." }; 


    // Initialize validation on the entire ASP.NET form. 
    $("#aspnetForm").validate({ 
     rules: myRules, messages: myMessages 
    }); 
Verwandte Themen