【发布时间】:2014-06-27 18:20:37
【问题描述】:
我有一个 Greasemonkey 脚本,它在 JIRA 和票务应用程序之间进行了一些关联。当您将项目与 JIRA 票证相关联时,它会向 JIRA 发布一些 API,以将其他票证添加到 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;
}
...
问题是我从输入元素获得的值每次都是空的。我已经在控制台中确认它是正确的输入元素。标签元素是正确的两个,因为它正在获取输入代码。
有什么想法或建议吗?
根据我在下面的发现,问题归结为:jQuery 的 .click(handler) 与 element.addEventListener( 'click', function(event) {...}, true) 有什么区别?
【问题讨论】:
-
什么版本的 Greasemonkey? GM 2 FUBAR'd 了一些东西。你的元数据块是什么? (最好也链接到整个脚本)控制台日志
$('#related_inputs input')并三次检查它是否是预期的节点。 -
是的,肯定找到了正确的节点,只是由于一些同步问题,即使在单击链接时文本输入中有文本,value="" 也是如此。 addEventListener 解决了,虽然我不知道为什么。
-
Arggh,所以我使用 .on('click'... 和一个委托将事件附加到外部 div 以防网站正在执行一些 AJAX,但它仍然发现文本输入字段为空白(标签始终正确,并且 div 中只有一个输入,因此输入对象是正确的,只是带有空白值 =“”)。还有其他想法吗?
标签: javascript jquery dom-events greasemonkey