【问题标题】:JQuery on change working in one form but not anotherJQuery关于以一种形式而不是另一种形式工作的变化
【发布时间】:2020-03-31 19:43:01
【问题描述】:

我有一个 php 聊天页面,其中包含群聊和一对一聊天。我正在使用 jquery on change 事件从 php 文件上传函数中获取数据,并将图像 HTML 文本输入到 contenteditable div 中,这样也可以和文本。

这在群聊窗口中可以正常工作,但在单个聊天窗口中却不行。两个聊天窗口代码都在同一个 html 中,带有隐藏显示的 js 样式块。一切正常,除了 on change 就是不管我做什么都是行不通的。

我知道在我的 sn-p 代码中我仍然需要处理目标,因为这是动态的,但是一旦 on change 事件实际触发,这应该足够简单。

这是表单位,它是在 js/php 函数中构建的,这是唯一一个不起作用 ''''''''''''''''''''''''

  modal_content += '<form id="uploadImagesc" method="post" action="php_includes/chat-img-upload-sc.php">';
  modal_content += '<label for="uploadFilesc"><i class="fas fa-cloud-upload-alt"></i></label>';
  modal_content += '<input type="file" name="uploadFilesc" id="uploadFilesc" accept=".jpg, .png" /></form>';

''''''''''''''''''''''''''''''''''''

这是来自正在工作的群聊的示例 '''''''''''''''''''''''''''''''''''''

<form id="uploadImage" method="post" action="php_includes/chat-img-upload.php">
     <label for="uploadFile"><i class="fas fa-cloud-upload-alt"></i></label>
     <input type="file" name="uploadFile" id="uploadFile" accept=".jpg, .png" />
    </form>

'''''''''''''''''''''''''''''''''''' 这些是关于。更改 JQuery 的位

'''''''''''''''''''''''''''''''''''''''''' 工作代码

$('#uploadFile').on('change', function(){
  '$'('#uploadImage').ajaxSubmit({
   target: "#group_chat_message",
   resetForm: true
  });
 });

''''''''''''''''''''''

不工作的代码

  $('#uploadFilesc').on('change', function(){
     //   var to_user_id = $(this).attr('id');
     // var chat_message = '#chat_message_'+to_user_id;
      $('#uploadImagesc').ajaxSubmit({
       target: chat_message,
       resetForm: true
      });
     });   

所以在这一点上,它只是获得 on change 以运行第二个函数调用以从 Php 获取数据,我会很高兴此刻的 onchange 警报。

【问题讨论】:

  • 您是否忘记发布您的“sn-p of code”
  • 对不起第一次发布时没有代码,也是为了确认我没有使用弹出模式,我按照教程开始但将其更改为代码块而不是弹出窗口,因为它不适合我的要求
  • 我刚刚花了 10 个小时的大部分时间尝试不同的谷歌搜索,我似乎无法让它开火,它只会破坏

标签: javascript jquery


【解决方案1】:

它不起作用,因为听起来您正在动态添加 HTML,然后尝试将事件处理程序附加到它。在这种情况下,您需要使用事件委托,它只是将事件处理程序附加到祖先。

这应该是您需要更改的全部内容:

$(document).on('change', '#uploadFilesc', function() {
  //   var to_user_id = $(this).attr('id');
  // var chat_message = '#chat_message_'+to_user_id;
  $('#uploadImagesc').ajaxSubmit({
    target: chat_message,
    resetForm: true
  });
});

document 替换最接近#uploadFilesc#uploadImagesc 的静态祖先。

【讨论】:

  • 谢谢,我相信这个答案与下面使用窗口作为绑定的答案相同,所以我会尝试找到另一个固定元素
  • 所以我用这个建议修复了我的代码谢谢你完成了将图像返回到聊天窗口的代码如下
【解决方案2】:

我用代码修复了它,将图像返回到下面的聊天窗口

$('#user_model_details').on('change', '#uploadImagesc', function() {
  $('#uploadImagesc').ajaxSubmit({   
    target: '#'+ $('#mess_id').attr("value"),
   resetForm: true
  });
 }); 

【讨论】:

    【解决方案3】:

    这是因为您将事件绑定到加载后动态添加到页面的元素。在您的场景中,您需要将侦听器绑定到页面加载时存在的内容,一个好的元素是window,如下所示:

    $(window).on('change', '#uploadImagesc', function() {});
    

    然后你的监听器应该可以工作了

    【讨论】:

    • 嗨,$(window) 恐怕不起作用,但是我使用了第一个非动态的 div 标签,然后它开始触发
    • 啊,很公平,使用body 可能会更好,因为它可靠地出现在任何页面上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2010-10-06
    • 2017-04-03
    • 2019-03-09
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多