1

我对 Web 开发比较陌生,所以我将 MVC 与 ASP.NET 一起使用,并且我很难使用 jQuery 及其功能。如果有帮助,我正在使用带有 ASP.NET MVC c# 的 Razor View Engine 和 devexpress 控件。

现在这是我的问题:

我有一个视图,它有一个 @Html.Action('view','controller'); 声明哪些链接到gridview。

在那个GridView上,我获得了一些客户端功能,这些功能在选择行并按下键盘上的Enter时会显示详细信息。

现在,我正在使用的 gridview 有一些自动搜索选项,方法是单击文本字段并输入您要查找的内容并按 Enter。如果我正在搜索或选择一行并按 Enter,我声明了一个值,该值包含一个值。

所以在那之后我让它工作,当我在搜索文本字段中按回车时,它不会打开详细视图。但它在搜索时执行回调。新创建的gridview。现在我遇到的问题是,在 GridView 上的此回调之后,我的函数不再找到该元素。

我尝试在 jquery 中使用 .find 函数,但这没有帮助。以下是我尝试的一些片段:

(这些位于 $(document).ready 函数中)

 $('#id').click(function () {
    // do something
 });

和 .find 版本:

 $('#gridview').find('#id').click(function () {
    // do  something
});

所以基本上我希望能够在再次构建gridview之后找到元素。

::EDIT:: textfields.click 上的 ID 保持不变。

::EDIT2:: 通过在 devexpress gridview 的 EndCallback 客户端事件中添加我当前的代码,我找到了一个廉价而肮脏的解决方案。但是必须有一个体面的方法来做到这一点......但这也证明了我之前的编辑,id 保持不变。

4

3 回答 3

2

.click()当您在包含一组元素的 jQuery 对象上调用绑定事件处理程序的函数时,例如,事件处理程序仅绑定到这些元素;它也不适用于随后创建的与选择器匹配的任何元素。如果替换这些元素,即使新元素具有相同id的 ,事件处理程序也会随之消失。但是,有一个解决方案,称为事件委托

基本原则是将事件处理程序绑定到一个不会被替换的元素,该元素将包含您想要触发事件的所有元素,并传递一个事件类型,一个选择器以匹配要触发的元素该事件类型的函数和要执行的函数。在 jQuery 1.7 或更高版本中,这是使用.on()函数的变体之一实现的:

$('#gridview').on('click', '#id', function(e) {
    // do something when the element with an id of 'id' is clicked on
});

请注意,我假设您的#gridview元素永远不会被替换。如果是,请选择另一个您可以引用的包含该元素的#gridview元素。如果一切都失败了,你可以自己调用它document

有关更多信息,请查看jQuery 文档中的直接和委托事件.on()部分。

如果您仍在使用 1.7 之前的 jQuery 版本,则需要使用该.delegate()函数。它以相同的方式工作,但前两个参数(事件类型和选择器)交换了:

$('#gridview').delegate('#id', 'click', function(e) {
    // do something when the element with an id of 'id' is clicked on
});
于 2012-09-19T10:06:50.670 回答
0

我假设网格视图的重新渲染是通过 ajax 完成的,否则 jquery 仍然可以工作。如果这些元素(id)已从 DOM 中删除,那么它们将失去绑定。您需要将点击事件添加到重新加载gridview的函数中。您可以将绑定放入一个函数并在重新加载某些内容时调用此函数:

function BindGridView(){

$('#id').die().click(function () {
    // do  something
});

}

然后在渲染gridview的地方调用这个重新绑定函数

$.ajax({
        cache: true,
        type: 'post',
        url: "/view/RenderGridView",
        success: function (msg) {

            //render grid view then re-bind
            BindGridView();


        }
    });

您还可以在另一个点击事件的结果上绑定点击事件

于 2012-09-19T10:10:03.877 回答
0

你必须在gridview上绑定,例如:

$('#gridview').on('click', 'class_or_id_selector', function(e) { /* your code here */ });

然后将处理动态创建的具有特定类或 id 的所有元素

于 2015-11-03T12:24:17.777 回答