Javascript jQuery动态复选框事件处理

Javascript jQuery动态复选框事件处理,javascript,jquery,json,Javascript,Jquery,Json,从JSON回复中附加HTML时,事件处理程序似乎会丢失其事件绑定。在使用.live()函数时,处理程序现在似乎可以工作 $.each(result[0], function(i,wellList) { $jsonResult = wellList["@name"]; $uid = wellList["@uid"]; $dynamicCheckBoxDiv += '<input type="checkbox" name="checkbox-1" value="'+ $

从JSON回复中附加HTML时,事件处理程序似乎会丢失其事件绑定。在使用
.live()
函数时,处理程序现在似乎可以工作

$.each(result[0], function(i,wellList) {
    $jsonResult = wellList["@name"];
    $uid = wellList["@uid"];
    $dynamicCheckBoxDiv += '<input type="checkbox" name="checkbox-1" value="'+ $uid
        + '" class="wellCheck" id="checkbox-'+i+'" />' +
        '<label for="checkbox-'+i+'">' + $jsonResult + '</label>';              
});
$dynamicCheckBoxDiv += '</fieldset></div>';

//Append results to div
$("#dynamicCheck").append($dynamicCheckBoxDiv).page();

$(".wellCheck").live('click', (function() {

它进入方法,但似乎没有选中任何框。我已经将jQuery和jQuery mobile添加到此页面,并且这两种方法都存在于
文档下。ready

您不需要
查找(“:checkbox”)
,因为
元素是复选框。只要这样做:

$("#selectNone").click(function(){
    $("#dynamicCheck .wellCheck").prop("checked", true);
});

.

您不需要
查找(“:checkbox”)
,因为
元素是复选框。只要这样做:

$("#selectNone").click(function(){
    $("#dynamicCheck .wellCheck").prop("checked", true);
});

.

第一位的解释是,写入HTML的侦听器仅适用于页面加载。任何时候向页面添加原始HTML时,都必须专门设置任何侦听器。类似地,仅仅更改“onclick”属性对侦听器没有任何影响

我怀疑你对第二位的问题与这样一个事实有关,至少通过我的阅读,“$(“.wellCheck”).live(…”)将影响到你迄今为止每次创建的每个框。使用类似“$dynamicCheckBoxDiv.live(…)”的东西可能会更好

我并不完全清楚确切的语法——我更多地使用克隆的HTML,而不是手动构建,因此您可能需要一个中间步骤来将其呈现到DOM对象或其他对象中(如果它还不是一个对象的话)——但我怀疑这样做会有所帮助


此外,您可能希望使用“.click(…)”,而不是“.live”(“click”,…)”。

第一位的解释是,写入HTML侦听器仅适用于页面加载。任何时候向页面添加原始HTML时,都必须专门设置任何侦听器。类似地,仅仅更改“onclick”属性对侦听器没有任何影响

我怀疑你对第二位的问题与这样一个事实有关,至少通过我的阅读,“$(“.wellCheck”).live(…”)将影响到你迄今为止每次创建的每个框。使用类似“$dynamicCheckBoxDiv.live(…)”的东西可能会更好

我并不完全清楚确切的语法——我更多地使用克隆的HTML,而不是手动构建,因此您可能需要一个中间步骤来将其呈现到DOM对象或其他对象中(如果它还不是一个对象的话)——但我怀疑这样做会有所帮助


此外,您可能希望使用“.click(…)”,而不是“.live”(“click”,…)”。

您应该使用委托不活动:

$("#dynamicCheck").delegate('.wellcheck','click', function(){
//stuff on click
});
这将是更好地约束在这个范围内,而不是在身体,这是生活所做的

编辑:有关复选框管理的一些示例,请参见此:


它使用较旧的attr(),应该使用prop(),但原则仍然存在。

您应该使用delegate not live:

$("#dynamicCheck").delegate('.wellcheck','click', function(){
//stuff on click
});
这将是更好地约束在这个范围内,而不是在身体,这是生活所做的

编辑:有关复选框管理的一些示例,请参见此:


它使用较旧的attr(),应该使用prop(),但原则仍然存在。

javascript有一些方法可以定义您知道的局部变量。。。变量-请使用它们,而不是污染范围。变量是局部变量。它们在each之上初始化(仍然在getJSON返回函数中)。是否有理由每次遍历“each”循环时都要重新创建变量?不,对不起,我没有意识到这一点-我假设您在范围之外创建了一个全局变量。javascript有定义局部变量的方法,您知道。。。变量-请使用它们,而不是污染范围。变量是局部变量。它们在each之上初始化(仍然在getJSON返回函数中)。有什么理由我每次遍历“each”循环时都要重新创建变量吗?没有,很抱歉,我没有意识到这一点-我以为你在范围之外创建了一个全局变量。非常感谢,工作得很好!还在试着适应选择器。非常感谢,工作得很好!你还在试着适应选择器。如果我用这个函数而不是我现在用的,它甚至不会在点击时输入这个函数。有什么想法吗?需要将事件更改为“更改”,而不是单击(或另外添加)。您还可以添加其他事件,如“焦点”等,包括自定义事件。为了避免混淆其他事件,选择器上应该有“selectOne”而不是“dynamicCheck”。最初问题的原因是多重应用事件处理程序。如果我使用该函数而不是当前的函数,它甚至不会在单击时输入该函数。有什么想法吗?需要将事件更改为“更改”,而不是单击(或另外添加)。您还可以添加其他事件,如“焦点”等,包括自定义事件。为了避免混淆其他事件,选择器上应该有“selectOne”而不是“dynamicCheck”。原始问题作为多重应用事件处理程序的原因。