search

Home  >  Q&A  >  body text

javascript - 使用jquery添加的元素怎样触发事件?

var i=2;
$(".stock_input a").click(function(){
  str="<p><input type='text' name='stock["+i+"][color]' class='main_input diy_input' value='' /> : <input type='text' name='stock["+i+"][stock]' onkeyup='clearNoNum(this)'' class='main_input diy_input' /> 图片:<input type='text' name='stock["+i+"][img]''  class='main_input diy_input url1' /> <input type='button'  value='选择图片' class='up_btn image1'  /> <span class='stock_close'>X<span></p>";
  i++;
  $(this).before(str);
})

str字符串不用管他,就是点击后添加了几个输入框,后面的选择图片按钮点击时弹出kindeditor的上传图片框,但是不知道该怎么重新绑定点击事件。
给button添加 onlick="img_add()" 也不行

ringa_leeringa_lee2902 days ago623

reply all(7)I'll reply

  • 怪我咯

    怪我咯2017-04-10 14:55:19

    这个问题其实应该用 代理来解决,原理就是利用事件的冒泡机制,在父元素上绑定事件,然后判断target是那个元素冒泡上来的,jq中1.2引入了live可以实现类似功能,但在1.7中废弃了,因日delegate代替,现在比较常用on

    $('child').live();
    $('parent').delegate('')
    $('parent').on
    

    上面的三中方式都可实现功能

    reply
    0
  • PHPz

    PHPz2017-04-10 14:55:19

    楼上几位把问题都说清楚了。我想给题主建议,赶紧结束这种代码。根本无法维护,写完了过一个星期你自己看着都看不懂。
    用framework,用template。用什么都比string拼html强。

    看看angular(framework),handlebar(template)。或者项目不好转,用backbone,knockout都行。

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 14:55:19

    最后一句“给button添加 onlick="img_add()" 也不行”,onlick错了哦,应该是onclick。
    另外如果你打算继续用jq添加事件,建议你搜索事件委托,事件冒泡,jq on。这3个关键词,你的问题就能解决了,并且修为更进一步~~~

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 14:55:19

    使用live来绑定,即使元素当前还没有被添加也是行的。例如:

    $('.clickme').live('click', function() {
      alert("Live handler called."); 
    });
    

    相应的需要使用die来解除绑定。

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 14:55:19

    on live delegate

    reply
    0
  • 阿神

    阿神2017-04-10 14:55:19

    请使用事件委托,jq的话就是on方法,live已被移除了

    reply
    0
  • 黄舟

    黄舟2017-04-10 14:55:19

    $("body").on("click", ".className", function(){});
    使用事件委托的方式

    reply
    0
  • Cancelreply