jquery单击事件保持解除绑定
当我运行代码时,click事件第一次起作用。当我点击它不止一次,它似乎点击甚至是无限的。如何保持单击事件有界jquery单击事件保持解除绑定,jquery,Jquery,当我运行代码时,click事件第一次起作用。当我点击它不止一次,它似乎点击甚至是无限的。如何保持单击事件有界 var Categories = function() { $("select[id^='CategoryListBox-']").click( function() { SelectedItem = $(this).val(); $(this).parent().load('/Categories/Cate
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提出了一个非常有效的另一点,您绝对不应该使用这样的选择器。我还有一个问题。是否有办法访问新加载的项目?我可以访问旧项目,但无法访问新项目我还有一个问题。是否有办法访问新加载的项目?我可以访问旧项目,但无法访问新项目您应该问一个新问题我有另一个问题。是否有办法访问新加载的项目?我可以访问旧项目,但无法访问新项目您应该问一个新问题我有另一个问题。是否有办法访问新加载的项目?我可以访问旧项目,但无法访问新项目我还有一个问题。是否有办法访问新加载的项目?我可以访问旧项目,但无法访问新项目