jQuery .click(处理程序)在Greasemonkey脚本中查找输入元素空白(然而addEventListen

jQuery .click(handler) finds input element blank in Greasemonkey script (addEventListener works, however)

本文关键字:输入 查找 元素 然而 addEventListen 空白 Greasemonkey 处理 click 程序 jQuery      更新时间:2023-09-26

我有一个Greasemonkey脚本,它在JIRA和票证应用程序之间做一些关联。当你将一个项目关联到JIRA票证时,它使一些API帖子到JIRA添加另一个票证到JIRA,所以它是双向的。相关的HTML(我无法控制更改)是:

<div id="related_inputs" class="related-items-actions-inner">
    <label class="align" style="width: 104px;">full_jira_url: </label>
    <input type="text" style="margin-left: 109px;">
    <br>
</div>

和按钮:

<a id="relate-button" class="tt_button">
  <span id="relate-button-text">Relate</span>
</a>

所以基本上当用户点击按钮/链接时,我想从上面的输入中提取输入值(在"相关输入"中)Div),然后做一些其他的事情。它曾经工作,不再是,所以我不确定这是由于浏览器的回归,一个JIRA的变化或一个变化的网站代码,我正在写的脚本。

Greasemonkey脚本的要点是:
(function () {
  console.log("Started script!");
  $('#relate-button').click( function(event) {
    var related_ticket_type = $('#related_inputs label').text().trim();
    console.log("ticket type is " + related_ticket_type);
    if (related_ticket_type != JIRA_LABEL_TEXT) { 
      return;
    }
    var jira_url = $('#related_inputs input').val();
    console.log(jira_url);  // <<== this is "" all the time now even when the input has data in it when pressed
    
    var match = jira_url.match(JIRA_REGEX);
    if (match.length != 2) {
      console.log("We didn't match the URL to a valid RDS Jira url.")
      return;
    }
    ...

问题是我从输入元素得到的值每次都是空的。我已经在控制台中确认它是正确的输入元素。label元素是正确的,因为它到达了输入代码。

有什么想法或建议吗?

在我发现了以下内容之后,问题归结为:jQuery的.click(handler)element.addEventListener( 'click', function(event) {...}, true)有什么区别?

因此,我没有使用jquery的。click(处理程序),而是做了以下操作:

var button_el = document.getElementById('relate-button');
button_el.addEventListener( 'click', function(event) {....}, true);

这样做修复了这个问题(即url的值是而不是空白)。然而,我真的很想知道为什么这解决了我的问题。

我使用的是Greasemonkey 1.15