Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检测对生成元素的点击?_Javascript_Jquery_Json - Fatal编程技术网

Javascript 如何检测对生成元素的点击?

Javascript 如何检测对生成元素的点击?,javascript,jquery,json,Javascript,Jquery,Json,我正在从JSON数据生成一组元素: 例如: 我对这个json所做的是使用“elements”中描述的元素创建一个表单,代码如下: var $input = $('<input type="submit" value="'+element.value + ... etc') .focus(...).blur(...).etc.; $('#container').append($input); 我已经有了这个草案的mumbo-jumbo+jquery代码

我正在从JSON数据生成一组元素: 例如:

我对这个json所做的是使用“elements”中描述的元素创建一个表单,代码如下:

var $input = $('<input type="submit" value="'+element.value + ... etc')
                  .focus(...).blur(...).etc.;

$('#container').append($input);
我已经有了这个草案的mumbo-jumbo+jquery代码

$('#container').html();//clears the container
for each element in elements do
    switch element.type
          case 'button':
          $('#container').append('<input type="submit" value="'+element.value + ... etc');
          end case
          case 'image':
          insert image bla bla bla
    end switch
end for each
我想检测一个元素是否被点击或其他类型的动作,如鼠标悬停等。如何将其绑定到元素? 另外,如何在不破坏元素的情况下更新元素

编辑:我暗示了一些重要的事情,我的坏消息:
我需要将elements javascript对象中的数据与生成的html元素链接起来。触发操作时检索的数据字段。这就是所有这些的原因。

你有两个选择。创建元素后,可以绑定侦听器,如下所示:

var $input = $('<input type="submit" value="'+element.value + ... etc')
                  .focus(...).blur(...).etc.;

$('#container').append($input);

这将覆盖容器中当前或以后动态添加的所有输入元素。您可以在中阅读有关事件委派的更多信息。

您有两个选项。创建元素后,可以绑定侦听器,如下所示:

var $input = $('<input type="submit" value="'+element.value + ... etc')
                  .focus(...).blur(...).etc.;

$('#container').append($input);

这将覆盖容器中当前或以后动态添加的所有输入元素。您可以在中阅读有关事件委派的更多信息。

如果您的js代码很短,只需在append函数中添加js代码即可。
append'如果js代码很短,只需在append函数中添加js代码即可。
追加“要检测动态添加元素上的事件,您应该在jQuery 1.7+和以前的版本中使用


编辑:是的,正如James在评论中指出的,总是建议在live上使用。

要检测动态添加元素上的事件,您应该在jQuery 1.7+和以前的版本中使用


编辑:是的,正如James在评论中指出的,总是建议在live上使用它。

或者直接绑定元素

$input = $('<input type="submit" value="'+element.value + ... etc');
$input.on('click', function() { 
    // do something 
}
$('#container').append($input);

或者直接绑定元素

$input = $('<input type="submit" value="'+element.value + ... etc');
$input.on('click', function() { 
    // do something 
}
$('#container').append($input);

构建表单非常简单,因为基本上已经映射了对象sytanx中元素的所有属性。因此,我们只需选择一个标记并将属性对象作为jQuery函数的第二个参数传入即可创建这些元素:

/* Container reference, counting variable */
var container = $("#container"), i = 0;

/* Clear out the container */
container.html("");

/* Cycle through each element */
while ( current = data.elements[i++] ) {
  /* Evaluate the value of the current type */
  switch ( current.type ) {
    /* Since <input type='button|image'> are so similar, we fall-through */
    case "button":
    case "image" :
      /* Choose a base element, pass in object of properties, and append */
      $("<input>", current).appendTo(container);
      break;
  }
}

在线演示:

构建表单非常简单,因为您已经基本上映射了对象sytanx中元素的所有属性。因此,我们只需选择一个标记并将属性对象作为jQuery函数的第二个参数传入即可创建这些元素:

/* Container reference, counting variable */
var container = $("#container"), i = 0;

/* Clear out the container */
container.html("");

/* Cycle through each element */
while ( current = data.elements[i++] ) {
  /* Evaluate the value of the current type */
  switch ( current.type ) {
    /* Since <input type='button|image'> are so similar, we fall-through */
    case "button":
    case "image" :
      /* Choose a base element, pass in object of properties, and append */
      $("<input>", current).appendTo(container);
      break;
  }
}

在线演示:

在创建元素时将onclick/onmouseover/etc添加到元素中,或者使用jQuery with.click/.mouseover/etc绑定元素。不过,前者更可取。请注意,.html不清除内容,只返回它。您应该使用.html来清除内容。在创建元素时,将onclick/onmouseover/etc添加到元素中,或者使用jQuery with.click/.mouseover/etc绑定元素。但是,前者更可取。请注意,.html不清除内容,只返回它。您应该使用.html来清除内容。最后使用live,最好使用delegate。最后使用live,最好使用delegate。我看不出任何一种情况下第一个选项更合适。@Purmou这与说没有理由不委托一些人声称的事件基本相同。如果加载到容器中的内容很大,并且99%的用户从未触发创建给定输入的代码,那么为什么要绑定侦听器呢?大多数情况下,授权可能更干净,但我有时能看到不授权的理由。我看不到任何一种情况下第一种选择更合适。@Purmou这基本上与说没有理由不授权一些人声称的事件是一样的。如果加载到容器中的内容很大,并且99%的用户从未触发创建给定输入的代码,那么为什么要绑定侦听器呢?大多数情况下,委派可能更干净,但我可以看到不委派的理由。回答不错,但一件事,更新创建的html元素怎么样?通过jquery更新它们不会将它们从容器中解除绑定。on或其他什么?@alfa64更新是什么意思?如果愿意,您可以更新这些元素,只要您监听事件,您就可以响应。我的意思是相同JSON的更新版本,迭代并更新每个元素而不创建新的元素,因为我认为销毁和生成相同的元素会导致绑定丢失,如果我错了,请纠正我。@alfa64我理解。在上面的代码中,$.on语句将以处理旧元素的方式处理新元素。在这里你没有什么好担心的,除非你的项目中有一些细节没有包括进去,这会影响你的工作。答案不错,但是一件事,更新创建的html元素怎么样?通过jquery更新它们不会将它们从容器中解除绑定。on或其他什么?@alfa64更新是什么意思?如果需要,可以更新这些元素
你喜欢,只要你倾听事件,你就可以响应。我的意思是相同JSON的更新版本,迭代和更新每个元素而不创建新的,因为我认为销毁和生成相同的元素会导致绑定丢失,如果我错了,请纠正我。@alfa64我理解。在上面的代码中,$.on语句将以处理旧元素的方式处理新元素。在这里你没有什么好担心的,除非你的项目中有一些细节没有包括进去,这会影响你的工作。
/* Listen for all clicks on input elements within the container */
container.on("click", "input", function(){
  /* We have a button, and an image. Alert either the value or src */
  alert( this.value || this.src );
});