dd.innerHTML += "<div> <img id='img" + i + "' /><div><input  type='button'  id='deleteimg'  value='删除' onclick=\"deleteimg()\"/></div></div>";
如图,如何在innerHTML中为一个input标签添加事件,用单引号不行,用转义符还是不行,网上说innerHTML 中的都是文本形式插入,onclick事件无法被识别,有解决办法吗

解决方案 »

  1.   

    你这个应该没问题。只是deleteimg()函数要放到全局环境下才行
      

  2.   

    在 dd.innerHTML += "<div> <img id='img" + i + "' /><div><input  type='button'  id='deleteimg'  value='删除' onclick=\"deleteimg()\"/></div></div>";后面加上点击事件
    1.原生 document.getElementById("deleteing").onclick = 具体方法
    2.jquery  $("#deleteing").on("click", function(){//do sth})
    3.这个应该是可以的 '<div> <img id="img' +i +'" /><div><input  type="button"  id="deleteimg"  value="删除" onclick="deleteimg()"/></div></div>'
      

  3.   

    innerHTML就是支持插入HTML字符串的,所以只要HTML字符串没写错,就能生效。
    你的代码我执行下,并没有错。
    另外,如果代码不是跑在低版本IE下,可以采用模板字符串的写法,如下:dd.innerHTML += `
    <div>
    <img id="img${i}"/>
    <div>
    <input type="button" id="deleteimg" value="删除"" onclick="deleteimg()"/>
    </div>
    </div>`;
      

  4.   

    不行的,我用的是谷歌浏览器,是不兼容吗,innerHTML是插入文本形式的,这个事件不能被识别
      

  5.   

     <!DOCTYPE html>
     <html>
     <head>
         <title></title>
     </head>
     <body>
     <div id="dd"></div>
     <script type="text/javascript">
         document.getElementById("dd").innerHTML += '<div> <img id="img' +0 +'" /><div><input  type="button"  id="deleteimg"  value="删除" onclick="deleteimg()"/></div></div>';
         function deleteimg(){
         alert('删除');
        }
     </script>
     </body>
     </html>
      

  6.   

    这个我前面有了var dd = document.getElementById("dd");
    我就是想知道如何在innerHTML中为哪个input标签加入onclick事件,,我那个就是点击删除,触发不了哪个deleteimg()事件。
      

  7.   

    这个我前面有了var dd = document.getElementById("dd");
    我就是想知道如何在innerHTML中为哪个input标签加入onclick事件,,我那个就是点击删除,触发不了哪个deleteimg()事件。这个不影响,你把代码贴出来或者用jquery  很简单的   $("#dd").on("click","input",function(){alert("deleteing")})
      

  8.   

    这个我前面有了var dd = document.getElementById("dd");
    我就是想知道如何在innerHTML中为哪个input标签加入onclick事件,,我那个就是点击删除,触发不了哪个deleteimg()事件。这个不影响,你把代码贴出来或者用jquery  很简单的   $("#dd").on("click","input",function(){alert("deleteing")})
    你这是要在innerHTML外面给id为dd的div内部的input添加一个事件?
      

  9.   


    如上图,我将你的代码插入document.body里,点击按钮有执行“deleteimg()”。只要定义好deleteimg函数即可被正确调用。这种写法在谷歌下是能正常运行的。
      

  10.   

    这个我前面有了var dd = document.getElementById("dd");
    我就是想知道如何在innerHTML中为哪个input标签加入onclick事件,,我那个就是点击删除,触发不了哪个deleteimg()事件。这个不影响,你把代码贴出来或者用jquery  很简单的   $("#dd").on("click","input",function(){alert("deleteing")})
    你这是要在innerHTML外面给id为dd的div内部的input添加一个事件?把input换成button的id也行啊,你要的不就是点击按钮执行方法.. 要实现这个效果的方法很多种
      

  11.   

    这个我前面有了var dd = document.getElementById("dd");
    我就是想知道如何在innerHTML中为哪个input标签加入onclick事件,,我那个就是点击删除,触发不了哪个deleteimg()事件。这个不影响,你把代码贴出来或者用jquery  很简单的   $("#dd").on("click","input",function(){alert("deleteing")})
    你这是要在innerHTML外面给id为dd的div内部的input添加一个事件?把input换成button的id也行啊,你要的不就是点击按钮执行方法.. 要实现这个效果的方法很多种
    但是放在innerHTML中的事件就是执行不了啊
      

  12.   

    那就怪了,我用就是不行啊,什么反应也没有,之前也换了个其他方法还是不行

    你把完整的代码发一下
    这是JSP界面的某一个事件触发需要id为dd的div,这个div里面什么都没有
                           <div id="dd"></div>
    然后就是在这个事件function里有语句
     var dd = document.getElementById("dd");
    dd.innerHTML += "<div> <img id='img1' /><div ><input  type='button'  onclick=\"deleteimg()\"  id='deleteimg' value='删除'/></div></div>";
    然后我为了检查那个deleteimg的方法是否能执行,我就写了一个特别简单的句子
    function deleteimg(){
     alert("确认删除?");
    }
    然后在谷歌上看点击删除,就是没有反应,我查了一下,有人说那个innerHTML里面是文本形式写入的,写入的事件不会被触发
    还有就是我没有写js,代码少就全在<script>标签里写的function
      

  13.   

    function deleteimg(){
     alert("确认删除?");
    }
    这个函数要放在全局环境中,不能放在其它函数内
      

  14.   

    那就怪了,我用就是不行啊,什么反应也没有,之前也换了个其他方法还是不行

    你把完整的代码发一下
    这是JSP界面的某一个事件触发需要id为dd的div,这个div里面什么都没有
                           <div id="dd"></div>
    然后就是在这个事件function里有语句
     var dd = document.getElementById("dd");
    dd.innerHTML += "<div> <img id='img1' /><div ><input  type='button'  onclick=\"deleteimg()\"  id='deleteimg' value='删除'/></div></div>";
    然后我为了检查那个deleteimg的方法是否能执行,我就写了一个特别简单的句子
    function deleteimg(){
     alert("确认删除?");
    }
    然后在谷歌上看点击删除,就是没有反应,我查了一下,有人说那个innerHTML里面是文本形式写入的,写入的事件不会被触发
    还有就是我没有写js,代码少就全在<script>标签里写的function
    首页,通过innerHTML写入的字符串会被解析成html;其次,感觉按你的思路来都看不出有问题,方便的话还是截个图吧。
      

  15.   

    这个错了的地方怎么改?
    /*合同管理系统*/
    /******头文件(.h)***********/
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "ctype.h"
    #define M 50
    struct addressbook
    {
    int num;
    char name[20];
    float money[20];
    char jia[15];
    char yi[15];
    int creatline[15];
    int deadline[15];
    char carryout[15];
    char classify[15];
    };
    typedef struct addressbook AddressBook;
    int Init(AddressBook t[]);
    int AddRecord(AddressBook t[],int n);
    void List(AddressBook t[],int n);
    void SearchOnName(AddressBook t[],int n); void changeOnName(AddressBook t[],int n); int Deleteonname(AddressBook t[],int n); void SortOnNum(AddressBook t[],int n);
    int quantityonjia(AddressBook t[]);
    void SaveRecord(AddressBook t[],int n);
    int LoadRecord(AddressBook t[]);
    int Menu_select();
    void main()
    {
    AddressBook adr[M];
    int length;
    while(1)
    {
    switch(Menu_select())
    {
    case 1: length=Init(adr);SaveRecord(adr,length);
    break;
    case 2:length=LoadRecord(adr);
    AddRecord(adr,length);
    break;
    case 3:length=LoadRecord(adr);
    List(adr,length);
    break;
    case 4:length=LoadRecord(adr);
    SearchOnName(adr,length);
    break;
    case 5:length=LoadRecord(adr);
    changeOnName(adr,length);
    SaveRecord(adr,length);
    List(adr,length);
    break;
    case 6:length=LoadRecord(adr);
    Deleteonname(adr,length);
    SaveRecord(adr,length);
    List(adr,length);
    break;
    case 7:length=LoadRecord(adr);
    SortOnNum(adr,length);
    SaveRecord(adr,length);
    List(adr,length);
    break;
    case 8:length=LoadRecord(adr);
    quantityonjia(adr,length);
    break;
    case 0:exit(0); /*如返回值为0则程序结束*/
    }
    }
    }
    int Menu_select()
    {
    int c;
    printf("press any key enter menu......\n");
    getchar(); /*读入任意字符*/
    printf("********************************MENU*********************************\n\ n");
    printf(" 1. 录入初始记录\n");
    printf(" 2. 增加记录\n");
    printf(" 3. 显示所有记录\n");
    printf(" 4. 根据合同名称查找记录\n");
    printf(" 5. 根据合同名称修改记录\n");
    printf(" 6. 根据合同名称删除记录\n");
    printf(" 7. 按合同编号从小到大显示记录\n");
    printf(" 8. 根据合同甲方统计其合同量数\n");
    printf(" 0. 退出\n");
    printf("*********************************************************************\n"); do{
    printf("\n Enter your choice(0-8):");
    if(scanf("%d",&c)!=1)
    { while(getchar()!='\n')
    continue;
    /* continue;*/
    }
    }while(c<0||c>8);
    return c;
    }
    int Init(AddressBook t[])
    {
    int i,n;
    system("cls");
    printf("\n请输入要输入的记录数:\n");
    scanf("%d",&n);
    printf("开始输入记录:\n");
    for(i=0;i<n;i++)
    { system("cls");
    printf("\n第%d条合同的编号:",i+1);
    scanf("%d",&t[i].num);
    printf("第%d条合同的名称:",i+1);
    scanf("%s",t[i].name);
    printf("第%d条合同的金额:",i+1);
    scanf("%s",t[i].money);
    printf("第%d条合同的甲方:",i+1);
    scanf("%s",t[i].jia);
    printf("第%d条合同的乙方:",i+1);
    scanf("%s",t[i].yi);
    printf("第%d条合同的等级:",i+1);
    scanf("%s",t[i].classify);
    printf("第%d条合同的生效日期:",i+1);
    scanf("%s",t[i].creatline);
    printf("第%d条合同的到期日期:",i+1);
    scanf("%s",t[i].deadline);
    printf("第%d条合同是否完成:",i+1);
    scanf("%s",t[i].carryout);
    }
    return (n);
    }
    int AddRecord(AddressBook t[],int n)
    {
    int i,m;
    char *s;
    system("cls");
    printf("\n请输入在增加的记录数:\n");
    scanf("%d",&m);
    printf("开始追加记录\n");
    for(i=n;i<n+m;i++)
    { system("cls");
    printf("\n第%d条合同的编号:",i+1);
    scanf("%d",&t[i].num);
    printf("第%d条合同的名称:",i+1);
    scanf("%s",t[i].name);
    printf("第%d条合同的金额:",i+1);
    scanf("%s",t[i].money);
    printf("第%d条合同的甲方:",i+1);
    scanf("%s",t[i].jia);
    printf("第%d条合同的乙方:",i+1);
    scanf("%s",t[i].yi);
    printf("第%d条合同的等级:",i+1);
    scanf("%s",t[i].classify);
    printf("第%d条合同的生效日期:",i+1);
    scanf("%s",t[i].creatline);
    printf("第%d条合同的到期日期:",i+1);
    scanf("%s",t[i].deadline);
    printf("第%d条合同是否完成:",i+1);
    scanf("%s",t[i].carryout);
    }
    return (n+m);
    }
    void List(AddressBook t[],int n)
    {
    int i;
    system("cls");
    printf("\n\n*********************************ADDRESS*************************** ********\n");
    printf("编号姓名金额甲方乙方等级生效日期到期日期是否完成\n");
    printf("---------------------------------------------------------------------------\n");
    for(i=0;i<n;i++)
    { printf("-6d%-20s%-20f",t[i].num,t[i].name,t[i].money);
    printf("%-15s%-15s%-15d%-15d%-15s%-15\n",t[i].jia,t[i].yi,t[i].classify,t[i].creatline,t[i].deadline ,t[i].carryout);
    if((i+1)%10==0)
    {
    printf("Press any key continue...\n");
    getchar();
    }
    }
    printf("************************************end********************************** *\n");
    }
    void SearchOnName(AddressBook t[],int n)
    {
    char s[20];
    int i,flag=0;
    system("cls");
    printf("请输入要查找的合同名:\n");
    scanf("%s",s);
    for(i=0;i<n;i++)
    {
    if(strcmp(s,t[i].name)==0)
    { flag=1;
    system("cls");
    printf("\n\n此人的信息如下:\n");
    printf("编号姓名金额甲方乙方等级生效日期到期日期是否完成\n");
    printf("---------------------------------------------------------------------------\n");
    printf("-6d%-20s%-20f",t[i].num,t[i].name,t[i].money);
    printf("%-15s%-15s%-15d%-15d%-15s%-15\n",t[i].jia,t[i].yi,t[i].classify,t[i].creatline,t[i].deadline ,t[i].carryout);
    }
    }
    if(flag==0)
    printf("查无此人!!\n");
    }
    int Deleteonname(AddressBook t[],int n)
    {
    char s[20];
    char ch='N';
    int i,j,flag=0;
    system("cls");
    printf("请输入要删除的合同名\n");
    scanf("%s",s);
    for(i=0;i<n;i++)
    {
    if(strcmp(s,t[i].name)==0)
    { flag=1;
    system("cls");
    printf("\n\n*********************************ADDRESS*************************** ********\n");
    printf("编号姓名金额甲方乙方等级生效日期到期日期是否完成\n");
    printf("---------------------------------------------------------------------------\n");
    printf("%-6d%-20s%-20f",t[i].num,t[i].name,t[i].money);
    printf("%-15s%-15s%-15d%-15d%-15s%-15\n",t[i].jia,t[i].yi,t[i].classify,t[i].creatline,t[i].deadline ,t[i].carryout);
    printf("Are you sure delete it(Y/N)\n");
    ch=getchar();
    if(ch=='y'||ch=='Y')
    {
    for(j=i;j<n-1;j++)
    t[j]=t[j+1];
    n--;
    i--;
    }
    }
    }
    if(flag==0)
    printf("查无此人!!\n");
    return n;
    }
    void changeOnName(AddressBook t[],int n)
    {
    char s[20];
    int i,j,flag=0;
    system("cls");
    printf("请输入要修改的合同名:\n");
    scanf("%s",s);
    for(i=0;i<n;i++)
    {
    if(strcmp(s,t[i].name)==0)
    { flag=1;
    system("cls");
    printf("\n\n*********************************ADDRESS*************************** ********\n");
    printf("编号姓名金额甲方乙方等级生效日期到期日期是否完成\n");
    printf("---------------------------------------------------------------------------\n");
    scanf("%-6d%-20s%-20f",t[i].num,t[i].name,t[i].money);
    scanf("%-15s%-15s%-15d%-15d%-15s%-15\n",t[i].jia,t[i].yi,t[i].classify,t[i].creatline,t[i].deadline ,t[i].carryout);
    } }
    if(flag==0)
    printf("查无此人!!\n");
    return n;
    }
    void SortOnNum(AddressBook t[],int n)
    { int i,j,flag;
    AddressBook temp;
    for(j=1;j<n;j++)
    for(i=0;i<n-j;i++)
    if(t[i].num>t[i+1].num)
    {
    temp=t[i];
    t[i]=t[i+1];
    t[i+1]=temp;
    }
    printf("排序成功!!!\n");
    }
    int quantityonjia(AddressBook t[])
    { int i,n=0;
    system("cls");
    for(i=0;i<n;i++)
    { printf("第%d条合同的甲方:",i+1);
    scanf("%s",t[i].jia);
    n++;}
    return(n);
    }
    /*保存函数,参数为结构体数组和记录数*/
    void SaveRecord(AddressBook t[],int n)
    {
    int i;
    FILE *fp; /*指向文件的指针*/
    if((fp=fopen("record.txt","w"))==NULL)
    {
    printf("can not open file\n");
    exit(1);
    }
    fprintf(fp,"%d",n);
    fprintf(fp,"\r\n");
    for(i=0;i<n;i++)
    {
    fprintf(fp,"%-6d%-20s%-20f",t[i].num,t[i].name,t[i].money);
    fprintf(fp,"%-15s%-15s%-15d%-15d%-15s%-15\n",t[i].jia,t[i].yi,t[i].classify,t[i].creatline,t[i].dead line,t[i].carryout);
    fprintf(fp,"\r\n");
    }
    fclose(fp);/*关闭文件*/
    }
    /*读入函数,参数为结构体数组*/
    int LoadRecord(AddressBook t[])
    {
    int i,n;
    FILE *fp;
    if((fp=fopen("record.txt","a+"))==NULL)
    {
    printf("can not open file\n");
    exit(1);
    }
    fscanf(fp,"%d",&n);
    for(i=0;i<n;i++)
    fscanf(fp,"%6d%20s%20f%-15s%-15s%-15d%-15d%-15s%-15\n",&t[i].num,t[i].name,t[i].money ,t[i].jia,t[i].yi,t[i].classify,t[i].creatline,t[i].deadline,t[i].carryout);
    fclose(fp);
    printf("从文件中成功读出记录!!!\n");
    return n;
    }
      

  16.   

    那就怪了,我用就是不行啊,什么反应也没有,之前也换了个其他方法还是不行

    你把完整的代码发一下
    这是JSP界面的某一个事件触发需要id为dd的div,这个div里面什么都没有
                           <div id="dd"></div>
    然后就是在这个事件function里有语句
     var dd = document.getElementById("dd");
    dd.innerHTML += "<div> <img id='img1' /><div ><input  type='button'  onclick=\"deleteimg()\"  id='deleteimg' value='删除'/></div></div>";
    然后我为了检查那个deleteimg的方法是否能执行,我就写了一个特别简单的句子
    function deleteimg(){
     alert("确认删除?");
    }
    然后在谷歌上看点击删除,就是没有反应,我查了一下,有人说那个innerHTML里面是文本形式写入的,写入的事件不会被触发
    还有就是我没有写js,代码少就全在<script>标签里写的function
    首页,通过innerHTML写入的字符串会被解析成html;其次,感觉按你的思路来都看不出有问题,方便的话还是截个图吧。之前也不知道为什么不可以,,现在也不知道做了什么操作,就行了,多谢各位指导