Javascript 为什么赢了';t JS/JQuery是否读取文本框值?

Javascript 为什么赢了';t JS/JQuery是否读取文本框值?,javascript,c#,jquery,html,asp.net,Javascript,C#,Jquery,Html,Asp.net,我已经到处寻找这个代码不起作用的原因,我被难住了 我有一个ASPX页面,后面有C#代码。HTML标记有一个正常工作的JQuery对话框。单击submit按钮时,对话框关闭,数据被传递到web公开的方法并写入数据库。将保存ddl和chkbox控件的所有值,但文本框的字符串值为空。对于文本框填充的字段和保存的数据,数据库设置为NOTNULL,因此我知道正在传递数据,但它不是输入到文本框中的值 文本框ID为txtCategoryName,客户端ID模式设置为静态。我已尝试使用以下方法获取值: var

我已经到处寻找这个代码不起作用的原因,我被难住了

我有一个ASPX页面,后面有C#代码。HTML标记有一个正常工作的JQuery对话框。单击submit按钮时,对话框关闭,数据被传递到web公开的方法并写入数据库。将保存ddl和chkbox控件的所有值,但文本框的字符串值为空。对于文本框填充的字段和保存的数据,数据库设置为NOTNULL,因此我知道正在传递数据,但它不是输入到文本框中的值

文本框ID为txtCategoryName,客户端ID模式设置为静态。我已尝试使用以下方法获取值:

var CategoryName = $('#txtCategoryName').val();
var CategoryName = $('#txtCategoryName').text();
var CategoryName = $(document.getElementById('txtCategoryName')).text();
var CategoryName = $(document.getElementById('txtCategoryName')).val();
var CategoryName = document.getElementById('txtCategoryName').value;
所有这些都返回相同的空白字段。我一次试一个。 目前我正在使用以下JS代码:

$(document).ready(function () {

var CategoryDialog = $(".EditCategories");
var BtnNew = $("#btnNew");
var CatDDL = document.getElementById("ddlCategoryParent3");
var CatChk = $("#chkCatActive").val();
var CategoryID = 0;
var CategoryName = $("#txtCategoryName").val();
var ParentID = CatDDL.options[CatDDL.selectedIndex].value;
if (CatChk) { CatChk = 1; } else { CatChk = 0; }



var CatDialog = $(CategoryDialog.dialog({

    maxHeight: 1000,
    closeOnEscape: true,
    scrollable: false,
    width: 650,
    title: 'Category Editor',
    autoOpen: false,


    buttons: [
        {
            width: 170,
            text: "Save",
            icons: {
                primary: "ui-icon-disk"
            },
            click: function () {
                $(this).dialog("close");
                window.alert(PageMethods.saveCat(CategoryName, ParentID, CategoryID, CatChk));

            }

        },

        {
            width: 170,
            text: "Delete",
            icons: {
                primary: "ui-icon-circle-minus"
            },
            click: function () {
                $(this).dialog("close");
            }

        },
        {
            width: 170,
            text: "Cancel",
            icons: {
                primary: "ui-icon-circle-close"
            },
            click: function () {
                $(this).dialog("close");
            }

        }
    ]
})






);



BtnNew.click(function () {
    $(CatDialog).dialog('open');
    $(CatDialog).parent().appendTo($("form:first"));

});




});
aspx页面的代码标记(categories.aspx)

以及保存方法:

/// <summary>
/// If the ID = 0 the data is written as a new category.
/// If the ID is greater than 0 the data is updated.
/// </summary>
/// <returns>The objects result value will hold the result of the attempt to update data as type Boolean.  The objects resultMessage value will contain the string result of the attempt to add data.</returns>
public void Save()
{

    result = dl.CategoryExists(this);
    if (result) { resultMessage = "The parent category already contains a category named " + CategoryName.Trim(); }
    else { 
        if (ID > 0)
        {
            if (!result) { resultMessage = "There was an unexpected error updating " + CategoryName.Trim() + ". No changes were saved."; }
        }
        else
        {
            result = dl.InsertCategory(this);
            if (!result) { resultMessage = "There was an unexpected error creating the Category."; }
        }
    }
    if (result) { resultMessage = "New Category Successfully Created"; }

}
//
///如果ID=0,则数据将作为新类别写入。
///如果ID大于0,则更新数据。
/// 
///“对象结果”值将保存尝试将数据更新为布尔类型的结果。objects resultMessage值将包含尝试添加数据的字符串结果。
公共作废保存()
{
结果=dl.CategoryExists(本);
if(result){resultMessage=“父类别已包含名为“+CategoryName.Trim();”的类别”
否则{
如果(ID>0)
{
如果(!result){resultMessage=“更新“+CategoryName.Trim()+”时出现意外错误。未保存任何更改。”;}
}
其他的
{
结果=dl.InsertCategory(本);
如果(!result){resultMessage=“创建类别时出现意外错误。”;}
}
}
如果(结果){resultMessage=“新类别已成功创建”;}
}

非常感谢您的帮助。

您正在页面启动时从对话框中获取编辑前的值

看起来是这样的:

var CategoryName = $("#txtCategoryName").val();
在页面编辑之前的页面启动时运行。这将获取输入字段的默认值,并且不会反映在页面上进行的任何编辑。上面的代码行不会创建与页面上输入字段的“实时”连接。它只是在运行代码行时获取值,从那时起,与对字段所做的任何编辑都没有连接

我认为您只想在以后实际需要对某些东西进行估价时获取价值。通常,您不希望缓存这样的值,因为缓存的值与页面上实际字段中的值不同步。只要在你需要它的时候把它拿出来,它就永远不会有过时的价值

如果使用此值的位置在对话框单击处理程序中,则将其提取到该位置,以便获取最新的值:

        click: function () {
            $(this).dialog("close");
            var CatChk = $("#chkCatActive").val() ? 1 : 0;
            var CategoryName = $("#txtCategoryName").val(); 
            var CatDDL = document.getElementById("ddlCategoryParent3");
            var ParentID = CatDDL.options[CatDDL.selectedIndex].value;               
            window.alert(PageMethods.saveCat(categoryName, ParentID, CategoryID, CatChk));

        }

这里的问题是,在输入字段被填充之前,您试图在页面加载后立即获得正确的值。将此代码放在按钮单击功能中:

var CategoryName = document.getElementById('txtCategoryName').value;
它应该对你有用。如果没有,请告诉我们

您的代码应该如下所示:


在创建元素之前,它们不会尝试获取值。该元素位于页面的HTML中,它们的代码位于
document.ready()
中,因此该元素可以正常存在。问题是,他们在编辑之前获取值,因此他们获取的值不是用户编辑的值。您的解决方案会起作用,但您对问题发生原因的解释不正确。谢谢,我以为这些DOM元素是在调用.dialog()时创建的。很好的解释,我认为这与我如何获取值有关。最后,我删除了变量并将$(“#txtCategoryName”).val()作为传递给page方法的参数放入click函数中。我还添加了验证以确保有文本。非常感谢你。
        click: function () {
            $(this).dialog("close");
            var CatChk = $("#chkCatActive").val() ? 1 : 0;
            var CategoryName = $("#txtCategoryName").val(); 
            var CatDDL = document.getElementById("ddlCategoryParent3");
            var ParentID = CatDDL.options[CatDDL.selectedIndex].value;               
            window.alert(PageMethods.saveCat(categoryName, ParentID, CategoryID, CatChk));

        }
var CategoryName = document.getElementById('txtCategoryName').value;
       click: function () {
            // note: CategoryID not used yet.
            var CategoryName = $("#txtCategoryName").val();
            var CatChk = $("#chkCatActive").val();
            var CatDDL = document.getElementById("ddlCategoryParent3")
            var ParentID = CatDDL.options[CatDDL.selectedIndex].value;
            if (CatChk) { CatChk = 1; } else { CatChk = 0; }
            $(this).dialog("close");
            window.alert(PageMethods.saveCat(CategoryName, ParentID, CategoryID, CatChk));
        }