jquery单击事件保持解除绑定

jquery单击事件保持解除绑定,jquery,Jquery,当我运行代码时,click事件第一次起作用。当我点击它不止一次,它似乎点击甚至是无限的。如何保持单击事件有界 var Categories = function() { $("select[id^='CategoryListBox-']").click( function() { SelectedItem = $(this).val(); $(this).parent().load('/Categories/Cate

当我运行代码时,click事件第一次起作用。当我点击它不止一次,它似乎点击甚至是无限的。如何保持单击事件有界

var Categories = function() {
        $("select[id^='CategoryListBox-']").click(
        function() {
            SelectedItem = $(this).val();
            $(this).parent().load('/Categories/CategoryPicker?CatID=' + SelectedItem);

            //send CatID to the requesting page
            $('form#SubmitPost').prepend('<input id="CatID" name="CatID" type="hidden" value="' + SelectedItem + '" />');
        });
    }

    Categories();

您通过替换其父元素中的dom来覆盖单击处理程序。您可以使用live来始终保持绑定

第2行是:

$select[id^='CategoryListBox-'].live“单击”


这应该可以做到

您正在通过替换其父元素中的dom来覆盖单击处理程序。您可以使用live来始终保持绑定

第2行是:

$select[id^='CategoryListBox-'].live“单击”


这应该可以做到

看起来您正在使用AJAX从服务器加载新的HTML,并且正在用新的选择框覆盖现有的选择框。这将删除事件侦听器。一种解决方案是使用live:

速度快得多

最后,这是创建隐藏输入的更好方法:

$("<input>").attr({id: "CatID", name: "CatID", type: "hidden", value: SelectedItem}).prependTo("#SubmitPost");

原因是这直接创建DOM元素,而不是解释HTML,这又慢得多。

看起来您正在使用AJAX从服务器加载新的HTML,并且正在用新的选择框覆盖现有的选择框。这将删除事件侦听器。一种解决方案是使用live:

速度快得多

最后,这是创建隐藏输入的更好方法:

$("<input>").attr({id: "CatID", name: "CatID", type: "hidden", value: SelectedItem}).prependTo("#SubmitPost");

原因是这会直接创建DOM元素,而不是解释HTML,这同样要慢得多。

是否可能创建/重新创建对象,然后无法重新绑定事件?我有一个站点,我们使用jQuery taconite插件进行了大量AJAX更新,最后一件事是显式绑定新创建的DOM对象上的单击事件。

您是否可能创建/重新创建对象,然后无法重新绑定事件?我有一个站点,我们使用jQuery taconite插件进行了大量AJAX更新,最后一件事是显式绑定新创建的DOM对象上的单击事件。

我认为当加载到父对象时,您正在用新的CategoryListBox-*元素替换原始的CategoryListBox-*元素。新的没有任何约束。您可以将该函数重新绑定到新元素,这会很难看,可能会使您陷入一种令人讨厌的递归情况,或者可以使用.live函数将类别绑定到id为CategoryListBox-*的任何DOM元素。这看起来像:

$("select[id^='CategoryListBox-']").live('click', function() { [body of your Categories() function] } );

这将在jQuery1.3+中工作。如果您使用的是1.2,那么您应该升级或使用livequery插件来获得类似的功能。

我认为,当您加载到parent中时,您是在用新的CategoryListBox-*元素替换原始的CategoryListBox-*元素。新的没有任何约束。您可以将该函数重新绑定到新元素,这会很难看,可能会使您陷入一种令人讨厌的递归情况,或者可以使用.live函数将类别绑定到id为CategoryListBox-*的任何DOM元素。这看起来像:

$("select[id^='CategoryListBox-']").live('click', function() { [body of your Categories() function] } );

这将在jQuery1.3+中工作。如果您使用的是1.2,您应该升级或使用livequery插件来获得类似的功能。

cletus提出了一个非常有效的另一点,您绝对不应该使用这样的选择器。我还有一个问题。是否有办法访问新加载的项目?我可以访问旧项目,但无法访问新项目。Letus提出了一个非常有效的另一点,您绝对不应该使用这样的选择器。我还有一个问题。是否有办法访问新加载的项目?我可以访问旧项目,但无法访问新项目我还有一个问题。是否有办法访问新加载的项目?我可以访问旧项目,但无法访问新项目您应该问一个新问题我有另一个问题。是否有办法访问新加载的项目?我可以访问旧项目,但无法访问新项目您应该问一个新问题我有另一个问题。是否有办法访问新加载的项目?我可以访问旧项目,但无法访问新项目我还有一个问题。是否有办法访问新加载的项目?我可以访问旧项目,但无法访问新项目