1

さまざまなファイルに jQuery があり、最近、マスター ページの項目を変更する必要がありました。これにより、さまざまな jaavscript インクルードが機能しなくなりました。Stackoverflow は、get by ID セレクターに関する問題を解決するための優れたアイデアを提案しています。

$("#ctl00_ContentMainPane_eliteUser").html

ただし、jquery.validate.js を使用してフォーム コントロールを検証するという問題があるため、外部JS ファイルにこのようなコードがあります。

$(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.");
});

マスターページが修正されたために名前が変更された場合、属性の名前付けの問題を防ぐ方法はありますか?

4

3 に答える 3

5

ID の構築方法を正確に指定できる .NET 4.0 を待ちます ;)

真剣に:次のようなことを行うことで、手動でルールを作成できます(JSオブジェクトはプロパティの「配列」に他なりません):

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 });
于 2009-08-05T11:36:25.143 に答える
1

jQuery での部分一致についてhttp://weblogs.asp.net/psperanza/archive/2009/05/07/jquery-selectors-selecting-elements-by-a-partial-id.aspxを見たことがありますか 。
私が見ることができる他の唯一のオプションは、jsファイルの内容をページに追加し、何かを使用することです <%=txtFirstName.ClientID%>

于 2009-08-05T11:37:37.480 に答える
0

私の答えは、veggerby の変更です。私のではなく、彼の回答に賛成票を投じてください。彼はその日を救った。

ちょっとした警告を追加するために、ここに私の応答を入れています。(私は 'attr("name") を使用しています)。そして、ドロップダウンリストでそれを行う方法を示します。

コンテンツ ページに「ddlState」および「ddlFavoriteColor」という名前の asp.net ドロップダウン リストがあることはわかりません。ドロップダウン リスト項目の上部にダミーの「--Select--」値を配置したので、selectedIndex が 0 より大きい値が必要です。

このプロジェクトは 3.5 で「立ち往生」していることに注意してください。:< クールな 4.0 機能を使って何かをした方がよかったのに。

はい、私の「チェック」コードはもっと小さくてもかまいませんが、Web サンプルについては、何が起こっているかを示すために、簡潔にするよりも少し冗長にするのが好きです。

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
    });
于 2013-03-28T15:01:44.893 に答える