Ajax 单击事件未在 Javascript 文件中触发

Ajax click event not firing In Javascript File

提问人:karDEVproj 提问时间:10/19/2022 最后编辑:karDEVproj 更新时间:10/19/2022 访问量:59

问:

所以我在jsp中有一个表,我试图在单击表行时触发一个函数以发布数据。 我有一个JS文件,我在其中使用ajax click事件创建了我的函数 问题是事件未触发

    $(document).ready(function() {
    $(document).on("click",'.outi',(function(MyObj)
    {   var Myjson = JSON.stringify(MyObj); 
         $.ajax({
             // Methode POST
             method: "POST",
             // URL
             url: "Client_frameServlet",
             // Mode asynchrone pour attendre la fin de l'ajax avant de continuer
             async: false, // Mode synchrone
             // Envoie des donnees
             data: Myjson ,
             //data: {user: document.princ_form.user.value, numero_carte: document.princ_form.password_old.value, password_n1: document.princ_form.password_n1.value},
             dataType: "json" ,
             success: function() {
            alert('In Ajax');
        }
             
         })
    }));
    });
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html>
    <META HTTP-EQUIV="expires" CONTENT="0">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META http-equiv="Content-Type" content="text/html; charset="iso-8859-1">
    <head>
      <title>TX06</title>
      <link rel='stylesheet' type='text/css' href='style.css'>
      <script src="date.js"></SCRIPT>
    </head>
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"
               ></script>
    <script src="res_gen.js">
    
    </script>
    <body>
     
      <table width="100%" align="center" border=0 cellspacing="0" cellpadding="0">
        <tr>
          <td>
              <table width="95%" align="center" border=0 cellspacing="0" cellpadding="0">
                <tr>
                  <td class="titre">Résultat de la recherche</td>
                </tr>
              </table>
          </td>
        </tr>
      </table>
    <br>
    <table border=0 bgcolor=#92ADC2 cellspacing=1 cellpadding=3 width=95% align=center>
        <tr class=entete>
            <td class=texte8 align=center>&nbsp;Nom</td>
            <td class=texte8 align=center>&nbsp;Date de naissance</td>
            <td class=texte8 align=center>&nbsp;Coll</td>
            <td class=texte8 align=center>&nbsp;Numéro</td>
            <td class=texte8 align=center>&nbsp;Numéro contact</td>     
            <td class=texte8 align=center>&nbsp;TITULAIRE</td>
        </tr>
        
                <tr class="outi" onMouseOver="this.className='over';" onMouseOut="this.className='outi';">
                    <td class=texte7 align=left colspan=5>&nbsp;Aucun client ne trouve</td>
                </tr>
            
    </table>
    
    <br>
    <table width="95%" align="center" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td align="right">
            <a target="corps" href="gen_rech.jsp" class="rub2" onmouseover="voltar.src = '../images/fr/voltar_s.gif';" onmouseout="voltar.src = '../images/fr/voltar.gif';"><img src="../images/fr/voltar.gif" border="0" name=voltar ></a>
        </td>
      </tr> 
    </table>
    </body>
    </html>

PS:我已经试过按类名调用它不起作用 并检查浏览器参数以查看它实际上没有触发

JavaScript Java AJAX JSP OnClickListener

评论

1赞 David 10/19/2022
显示的 HTML(和 JavaScript)格式不正确且无效。你能把它更新成一个可运行的堆栈片段来演示这个问题吗?(如果问题纯粹是客户端的,JSP 似乎根本不涉及这里,您可以使用页面上生成的 HTML 来演示问题。
0赞 karDEVproj 10/19/2022
您好,感谢您的回复,我编辑了代码并将浏览器中显示的html,sam用于js文件
0赞 David 10/19/2022
代码片段产生错误。似乎包含额外的代码,这些代码依赖于未包含的代码。该示例应是演示问题的最小可重现示例。或者,如果此处显示的错误也发生在您自己的项目中,则解决该错误(以及您看到的任何其他错误)将是您的第一步。
0赞 karDEVproj 10/19/2022
我编辑了此问题中不需要的代码删除部分,代码片段现在正在运行,您知道我的 ajax 事件不是第一个问题是什么吗?

答:

0赞 David 10/19/2022 #1

请注意您在点击处理程序中筛选的元素:

$(document).on("click", '.outi', (function(MyObj){

处理程序函数将专门针对具有该类的元素执行。但是你的元素没有那个类outi

当页面首次加载时,它会这样做:

<tr class="outi" onMouseOver="this.className='over';" onMouseOut="this.className='outi';">

但请注意该元素上的内联 JavaScript 在做什么。当鼠标悬停在元素上时,它会更改类

在用户单击元素之前,鼠标将悬停在元素上。

您可以定位它实际具有的类:

$(document).ready(function() {
  $(document).on("click", '.over', (function(MyObj){
    console.log('test');
  }));
});
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<table border=0 bgcolor=#92ADC2 cellspacing=1 cellpadding=3 width=95% align=center>
  <tr class=entete>
    <td class=texte8 align=center>&nbsp;Nom</td>
    <td class=texte8 align=center>&nbsp;Date de naissance</td>
    <td class=texte8 align=center>&nbsp;Collaborateur</td>
    <td class=texte8 align=center>&nbsp;Numéro de la carte</td>
    <td class=texte8 align=center>&nbsp;Numéro de contrat</td>      
    <td class=texte8 align=center>&nbsp;TITULAIRE</td>
  </tr>
  <tr class="outi" onMouseOver="this.className='over';" onMouseOut="this.className='outi';">
    <td class=texte7 align=left colspan=5>&nbsp;Aucun client ne trouve</td>
  </tr>
</table>

或者,也许同时使用这两个类,而不是将一个类替换为另一个类:

$(document).ready(function() {
  $(document).on("click", '.outi', (function(MyObj){
    console.log('test');
  }));
});
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<table border=0 bgcolor=#92ADC2 cellspacing=1 cellpadding=3 width=95% align=center>
  <tr class=entete>
    <td class=texte8 align=center>&nbsp;Nom</td>
    <td class=texte8 align=center>&nbsp;Date de naissance</td>
    <td class=texte8 align=center>&nbsp;Collaborateur</td>
    <td class=texte8 align=center>&nbsp;Numéro de la carte</td>
    <td class=texte8 align=center>&nbsp;Numéro de contrat</td>      
    <td class=texte8 align=center>&nbsp;TITULAIRE</td>
  </tr>
  <tr class="outi" onMouseOver="this.classList.add('over');" onMouseOut="this.classList.remove('over');">
    <td class=texte7 align=left colspan=5>&nbsp;Aucun client ne trouve</td>
  </tr>
</table>

无论您采用何种方法,主要的一点是,当您筛选特定类时,元素需要具有该类才能触发事件处理程序。