Javascript 设置<;输入>;通过jquery(selector).prop()函数检查不适用于动态html

Javascript 设置<;输入>;通过jquery(selector).prop()函数检查不适用于动态html,javascript,c#,jquery,html,ajax,Javascript,C#,Jquery,Html,Ajax,我有一个页面,它位于$(document).ready,调用一个javascript函数,该函数通过对服务器的ajax调用,根据页面请求的上下文动态创建一些输入控件 我需要将一个动态创建的控件(输入复选框)设置为默认选中 我试着通过$(#id).prop('checked',true)设置它在调用服务器后,但它不工作。我猜这个领域还不存在 如何修改从ajax调用动态创建的html控件 在HTML中设置checked,而不是使用prop进行初始检查 这可以是静态的,也可以是动态的。只需将选中的添

我有一个页面,它位于
$(document).ready
,调用一个javascript函数,该函数通过对服务器的ajax调用,根据页面请求的上下文动态创建一些输入控件

我需要将一个动态创建的控件(输入复选框)设置为默认选中

我试着通过
$(#id).prop('checked',true)设置它在调用服务器后,但它不工作。我猜这个领域还不存在


如何修改从ajax调用动态创建的html控件

在HTML中设置
checked
,而不是使用
prop
进行初始检查


这可以是静态的,也可以是动态的。只需将选中的
添加到动态生成中即可。然后,您需要引入
prop
,以满足您的需要。

在HTML中设置
checked
,而不是使用
prop
进行初始检查


这可以是静态的,也可以是动态的。只需将选中的
添加到动态生成中即可。然后,您可以使用
prop
来满足您的需要。

您可以使用
attr
removeAttr
方法来选中/取消选中复选框/无线电输入

// to check a checkbox or radio button
$(selector).attr("checked","checked");

// to uncheck a checkbox (radio button will be cleared on another check)
$(selector).removeAttr("checked");

如果您是从AJAX创建输入,则可以在更新DOM后将其放在AJAX
success
complete
函数上。但是@Aaron是对的,在服务器端设置生成值更有效。

您可以使用
attr
removeAttr
方法选中/取消选中复选框/无线电输入

// to check a checkbox or radio button
$(selector).attr("checked","checked");

// to uncheck a checkbox (radio button will be cleared on another check)
$(selector).removeAttr("checked");

如果您是从AJAX创建输入,则可以在更新DOM后将其放在AJAX
success
complete
函数上。但是@Aaron是对的,在服务器端设置生成值更有效。

提供的答案很好,可以解决问题,但不能解决我的问题。这是因为生成这些html元素的javascript是一个抽象文件,它为许多不同的应用程序生成html输入控件。我无法修改该文件以专门选中某个案例的复选框

我所做的是,在这个通用javascript文件中,调用一个
setDefaults()
方法(如果它存在于当前上下文中)。因此,该脚本的调用者可以选择实现一个setDefaults(),在生成html之后,该脚本将被通用脚本调用

function initReport(reportID) {
    //request the data needed to create the dynamic html from the server:
    $.ajax({
        type: "GET",
        url: "/report.aspx/GetReportDetails?reportID=" + reportID,
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    }).done(function (result) {
        reportFormData = JSON.parse(result.d);
        //request our generic html template:
        $.ajax({
            type: "GET",
            url: "/assets/modules/report/Templates/Form.html"
        }).done(function (result) {
            $("#Form").html(result);
            //generate html from server data:
            buildViewModel(reportFormData);
            buildPage(reportFormData);
            kendo.bind($("#Form"), viewModel);
            //call "setDefaults" function only if it has been defined (in the current report template)
            if (typeof setDefaults === "function")
            {
                setDefaults();
            }
        });
    }).fail(function (jqXHR, textStatus, err) {
        console.log("An error has occurred: " + err);
    });
...
}

提供的答案很好,可以解决问题,但不能解决我的问题。这是因为生成这些html元素的javascript是一个抽象文件,它为许多不同的应用程序生成html输入控件。我无法修改该文件以专门选中某个案例的复选框

我所做的是,在这个通用javascript文件中,调用一个
setDefaults()
方法(如果它存在于当前上下文中)。因此,该脚本的调用者可以选择实现一个setDefaults(),在生成html之后,该脚本将被通用脚本调用

function initReport(reportID) {
    //request the data needed to create the dynamic html from the server:
    $.ajax({
        type: "GET",
        url: "/report.aspx/GetReportDetails?reportID=" + reportID,
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    }).done(function (result) {
        reportFormData = JSON.parse(result.d);
        //request our generic html template:
        $.ajax({
            type: "GET",
            url: "/assets/modules/report/Templates/Form.html"
        }).done(function (result) {
            $("#Form").html(result);
            //generate html from server data:
            buildViewModel(reportFormData);
            buildPage(reportFormData);
            kendo.bind($("#Form"), viewModel);
            //call "setDefaults" function only if it has been defined (in the current report template)
            if (typeof setDefaults === "function")
            {
                setDefaults();
            }
        });
    }).fail(function (jqXHR, textStatus, err) {
        console.log("An error has occurred: " + err);
    });
...
}


您必须根据Ajax的complete方法中的响应进行任何更改您是否尝试过将html字符串包装在jquery对象中并在将其插入DOM之前选中复选框?您必须根据Ajax的complete方法中的响应进行任何更改您是否尝试过将html字符串包装在jquery对象中并选中在将HTML插入DOM之前选中复选框?我想到了这个解决方案,但不幸的是,HTML生成是在一个单独的库中抽象的,我不能为这个单独的库修改它case@JamesWierzba即使它来自一个库,您仍然可以在加载元素后访问它,然后在那里更改您的设置。这个解决方案出现在脑海中,但不幸的是HTML生成被抽象在一个单独的库中,我无法为这个单独的库进行修改case@JamesWierzba即使它来自一个库,您仍然可以在加载元素后访问它,然后在那里更改设置。不建议使用
prop
而不是
attr
?Taha Alexander是正确的,
prop
优于
attr
,因为prop与实际的DOM元素一起工作。我不知道这一点,很高兴知道。现在阅读:是否建议使用
prop
而不是
attr
?Taha Alexander是正确的,
prop
attr
更受欢迎,因为prop与实际的DOM元素一起工作。我不知道,很高兴知道。现在读到:@JamesWizerzba,我还是不明白。在一天结束时,表单和输入会出现在DOM中。我很难解释,但本质上,我们有一个通用“报告”的每个实现的javascript文件。正是在这个文件中,我必须放置DOM操作,因为它只特定于该报表实例。但是,在执行报表实例脚本时尚未生成表单输入。因此,需要从通用报告脚本回调实例脚本(仅当该函数存在时,以免中断没有
setDefaults
函数的其他实例)。如果是这种情况,为什么要尝试
$(#id).prop('checked',true)?@Aaron我不明白这个问题。这就是我想要做的,将复选框的属性更改为true。在我选择该复选框时,该复选框在DOM中不存在。因此,我的解决方案是定义一个函数,选中复选框,然后在将复选框添加到DOM后在通用脚本中调用该函数。这确实令人困惑,但这是我们应用程序中深深嵌入的框架,这是我能看到的唯一解决方法。
然后在通用脚本中调用函数
您可以将其设置为选中