Javascript click(处理程序)在Greasemonkey脚本中发现输入元素为空(但是addEventListener可以工作)
我有一个Greasemonkey脚本,它在JIRA和票证应用程序之间做了一些关联。当您将一个项目与JIRA票证关联时,它会向JIRA发布一些API,以将另一个票证添加到JIRA中,因此它是双向的。我无法控制更改的相关HTML是:Javascript click(处理程序)在Greasemonkey脚本中发现输入元素为空(但是addEventListener可以工作),javascript,jquery,dom-events,greasemonkey,Javascript,Jquery,Dom Events,Greasemonkey,我有一个Greasemonkey脚本,它在JIRA和票证应用程序之间做了一些关联。当您将一个项目与JIRA票证关联时,它会向JIRA发布一些API,以将另一个票证添加到JIRA中,因此它是双向的。我无法控制更改的相关HTML是: <div id="related_inputs" class="related-items-actions-inner"> <label class="align" style=&qu
<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的.clickhandler与element.addEventListener'click',functionevent{…},true之间有什么区别?因此,我没有使用jQuery的.clickhandler,而是做了以下工作:
var button_el = document.getElementById('relate-button');
button_el.addEventListener( 'click', function(event) {....}, true);
这样做修复了url的值不是空的问题。然而,我真的很想知道为什么这解决了我的问题
我正在使用Greasemonkey 1.15。什么版本的Greasemonkey?通用汽车2号失去了一些东西。您的元数据块是什么?链接到整个脚本也是最好的控制台日志$'related_inputs input',并三次检查它是否是预期的节点。是的,确实找到了正确的节点,只是由于一些同步问题,值=即使在单击链接时文本输入中有文本。addEventListener解决了这个问题,虽然我不知道为什么。啊,所以我用了。点击。。。以及一个将事件附加到外部div的委托,以防网站正在执行一些AJAX,但它仍然发现文本输入字段是空的标签总是正确的,并且div中只有一个输入,因此输入对象是正确的,只有一个空值=。还有其他想法吗?