C# jQuery未注册更改函数

C# jQuery未注册更改函数,c#,jquery,asp.net-mvc,razor,C#,Jquery,Asp.net Mvc,Razor,我使用的是Visual Studio 2010/C#4.0/MVC 3/Razor/jQuery 1.5.1/Google Chrome 21.0.1180.83 m/Windows 7 Enterprise 下面是我的代码,注释掉了不显著的东西(我认为是不显著的) 基本上,我正在创建一个元素,并试图在用户更改其值时将更改事件绑定到该元素,但该事件似乎没有绑定。当我查看GoogleChrome(Ctrl+Shift+J)中的元素时,在“事件侦听器”下没有看到任何内容 $(函数(){ // ..

我使用的是Visual Studio 2010/C#4.0/MVC 3/Razor/jQuery 1.5.1/Google Chrome 21.0.1180.83 m/Windows 7 Enterprise

下面是我的代码,注释掉了不显著的东西(我认为是不显著的)

基本上,我正在创建一个
元素,并试图在用户更改其值时将更改事件绑定到该元素,但该事件似乎没有绑定。当我查看GoogleChrome(Ctrl+Shift+J)中的元素时,在“事件侦听器”下没有看到任何内容


$(函数(){
// ...
$('#StoredProcedureName')。更改(函数(){
// ...
变量参数=$(“#参数”);//
$.getJSON(“@Url.Action(/**/)”{
// ...
},函数(数据){
参数为空();
// ...
$。每个(数据、函数(k、v){
// ...
参数。
追加($('')。
//……其他要素
追加($('')。
追加($('')。
// ...
改变(功能){
警报(“here2”);//此警报未发生。
}).
addClass('testClass')。//但该类正在显示。
// ...
)
)
);
});
// ...
});
});
// ...
});
当我制作一个测试MVC网站并这样做时,它似乎起了作用。这太令人费解了

<!DOCTYPE html>

<html>
<head>
    <title></title>

    <script type="text/javascript" src="../../Scripts/jquery-1.5.1.js"></script>

    <script type="text/javascript">
        $(function () {
            $("#a").append(
                $("<input />").change(function () {
                    alert("here1");
                }).attr('value', 'text')
            );
            $("#b").change(function () {
                alert("here2");
            });
        });
    </script>
</head>
<body>
    <div id="a">
    </div>
    <input id="b" />
</body>
</html>

$(函数(){
$(“#a”)。追加(
$(“”)。更改(函数(){
警惕(“此处1”);
}).attr('值','文本')
);
$(“#b”)。更改(函数(){
警惕(“此处2”);
});
});
有人能告诉我为什么我的第一个警报没有被执行,尽管
元素显示在正确的类中

编辑:

正在创建该表以及输入元素:


您能在不使用表元素的情况下尝试吗

我只是想知道你是如何做到这一点的:

append($('<tr />')
append($('')
我希望这是一个封闭的表行,同样地,对于

append($('<td />')
append($('')
请看一下这个构建表格的示例


就我个人而言,我会尝试向输入字段添加一个类,并使用jquerys Live()函数代替常规绑定。
可以使用类foo将onclick绑定到所有输入。



如果您不喜欢live,是否可以尝试不立即执行.change绑定,而是像您在工作示例中那样在其id上调用额外的jquery选择器?

请随意编辑并进行解释。但基本上在我的代码中,我是这样对表元素进行排序的:

var options = parameters.children();
options.sort(function (a, b) {
    if (a.text > b.text) return 1;
    else if (a.text < b.text) return -1;
    else return 0
});
parameters.empty().append(options);
var options=parameters.children();
选项.排序(函数(a,b){
如果(a.text>b.text)返回1;
否则如果(a.text

删除这个(我不知道为什么会有它)就成功了。

这听起来确实像是jQuery库没有正确加载-你确定你的站点是从Web服务器的根目录运行的吗(不是
/MyApp/
)?如果不是,你的jQuery路径将不正确。查看“网络”选项卡并查看是否可以看到库加载正确。是否也可以链接原始html页面?我没有看到id为StoredProcedureName的文本框,可能它名为SPNAME,或者您键入了错误?@Basic:jQuery库正在生成
。我没有看到控制台中无效的
$
错误。我不确定是什么原因你指的是Chrome中的net选项卡?@Kristof:在我的页面后面,我有:
选择一个存储过程:@Html.DropDownList(“StoredProcedureName”,Enumerable.Empty())
。它就在那里。正在构建表。
元素正在出现。
元素就在那里。就在我更改它的时候,警报没有发生。当我在Chrome中检查生成的元素时,事件侦听器中没有事件。@WordsLikeJared Ctrl-Shift-J面板有一个“网络”选项卡,其中显示了为该页面下载的所有资源。也就是说,我没有意识到某些jQuery正在工作,所以我可能错了。我正在构建与该问题最高答案类似的表,只是我没有执行
。find('tbody'))
。我可以试试。等等。我想说的是,你我使用的是封闭表标记,而不是……。因此,除非我遗漏了什么,否则我不确定你的输入是否会在指定的位置。我不确定我是否理解——我想选择器中的
相同。请参阅我在q中上传的图像uestion——它显示输入元素出现。如果我理解正确,那么我认为它在预期位置?是的,刚刚看到你的图像,所以我认为结构看起来不错,令人费解。抱歉,我添加了一些我当时意识到不相关的内容,无法找到删除它的方法。
var options = parameters.children();
options.sort(function (a, b) {
    if (a.text > b.text) return 1;
    else if (a.text < b.text) return -1;
    else return 0
});
parameters.empty().append(options);