解决javascript修改input值无效的问题


前言:这是一次很艰难的探索,为解决一点简单的问题却绕了很大的弯子,千牛电商平台改价中不能批量加价,由于公司电脑是古老的xp系统,所以只能我想到用写浏览器扩展操作页面修改值,可是碰到了标题上的问题…


经过几天查询百度,查看360浏览器扩展开发文档等,寻找到了几个有参考价值的文章,特别是这个:
记录一次艰难,却很有意思的问题解决经历-React input
还有这篇文章:js 模拟键盘输入

细节不多说了,成功解决!上代码:

扩展程序包含下列文件

    bindEvent.js
    icon.png
    manifest.json
    popup.html
    method.js

method.js文件

chrome.extension.onRequest.addListener(
    function (request, sender, sendResponse)
{
    if (request.hello == "ok")
    {
		
		// 这里写代码... 
        var inputs = document.getElementsByTagName("input");
		var price = inputs[inputs.length - 1];
        var new_price = (parseFloat(price.value) + 1.5).toString();
		var message = "原价格:" + price.value.toString() + "新价格:" + new_price;
        // price.value = new_price;
		
		// 解决descriptor拦截value值的问题
		let lastValue = price.value;
		// 第一次修改input值
		price.value = new_price;
		let event = new Event('input',{bubbles:true});
		let tracker = price._valueTracker;
		if (tracker){
			// 被拦截后再次修改input值
			tracker.setValue(new_price);
		}
		price.focus();
		price.dispatchEvent(event);
		
		
        sendResponse(
		{
				data: "修改成功!"
				}
			);
		}
	}
);

bindEvent.js文件

var a = document.getElementById('a');
a.onclick = function () {
	chrome.tabs.query({ currentWindow: true, active: true }, function (tabs) {
      chrome.tabs.sendRequest(tabs[0].id, { "hello": "ok" }, function (response) {
            alert(response.data);
        });
    });
}

manifest.json文件

    {
      "name": "阿狸扩展",
      "manifest_version": 2,
      "version": "1.0",
	  "author":"showbo,http://www.coding123.net",
      "description": "一个有趣的扩展程序。",
      "browser_action": {"default_popup": "popup.html","default_icon": "icon.png"},
      "content_scripts": [{"matches": ["*://*/*"],"js": ["method.js"]}],
      "permissions": ["*://*/*","tabs"],
      "devtools_page": "devtools.html"
    }

popup.html文件

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title></title></head>
<body>
<pre>请打开网站,然后运行。</pre>
<a id="a" href="#" size="20">start</a>

<script src="bindEvent.js">
</script>
</body>
</html>

总结:

本文主要是解决修改input值无效的问题,参考method.js文件,为了保证上下文可读性,所以放出全部的完整代码。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: element.style 修改无效可能有以下几种原因: 1. CSS 样式优先级问题:如果元素的样式被其他 CSS 规则所覆盖,那么 element.style 修改就会无效。可以通过在样式表中增加 !important 来提高样式优先级,或者通过 JavaScript 修改元素的 class 属性来改变样式。 2. 元素的 display 属性问题:如果元素的 display 属性为 none,那么 element.style 修改也会无效。可以通过修改元素的 display 属性来显示元素。 3. 元素的样式属性不支持修改:有些元素的样式属性是只读的,例如 input 元素的 type 属性。这些属性无法通过 element.style 修改。 4. 元素的样式属性名不正确:有些样式属性名在 JavaScript 中与 CSS 中不同,例如 font-size 在 JavaScript 中应该写成 fontSize。如果样式属性名不正确,element.style 修改也会无效。 5. 元素的样式属性不正确:有些样式属性必须带有单位,例如 width 和 height 属性必须带有 px 单位。如果样式属性不正确,element.style 修改也会无效。 ### 回答2: element.style 属性用于设置 HTML 元素的 CSS 样式,可以通过 JavaScript 来动态地修改元素的样式。但有时候,在使用 element.style 修改元素的样式时,可能会发现修改无效。这种情况通常有以下几个原因: 1. CSS 样式被其他规则覆盖。 在编写 CSS 样式时,规则之间可能会发生冲突。如果一个元素同时被多个规则选中,那么优先级高的规则就会覆盖优先级低的规则。因此,当使用 element.style 设置元素的样式时,如果该样式被其他规则覆盖,就会导致修改无效解决方法:检查 CSS 样式表中是否有与需要修改的样式冲突的规则,可以通过设置优先级、使用 !important 等方式来提高修改后的样式的优先级,以达到修改的目的。 2. element.style 的语法错误。 在使用 element.style 设置元素的样式时,需要注意样式属性名和属性的拼写和语法是否正确。如果语法错误,就会导致修改无效解决方法:检查代码中 element.style 的使用是否符合语法规则,如果发现错误,需要进行修改。 3. 非内联样式无法修改。 如果元素的样式是在 CSS 样式表中定义的,而不是在元素的 style 属性中定义的内联样式,那么使用 element.style 来修改这些样式是无效的。 解决方法:如果需要修改 CSS 样式表中的样式,可以通过 JavaScript 动态地添加或删除 CSS 规则,或者通过修改元素的 class 属性来实现。 综上所述,当使用 element.style 修改元素的样式时,需要注意 CSS 样式表中的规则是否存在冲突、语法是否正确,并且要区分内联样式和 CSS 样式表中的样式。只有在这些方面都经过仔细检查才能确保 element.style 修改有效。 ### 回答3: element.style 是用来修改元素的内联样式(inline style)的,即通过在 HTML 元素的 style 属性中设置 CSS 样式,例如: ``` <div id="myDiv" style="background-color: red;"></div> ``` 在上面的代码中,我们通过 style 属性将红色背景色应用到了一个 div 元素中。 如果我们想通过 JavaScript修改这个元素的背景色,我们可以使用 element.style.backgroundColor 属性,例如: ``` var myDiv = document.getElementById('myDiv'); myDiv.style.backgroundColor = 'blue'; ``` 上面的代码将元素的背景色从红色修改为了蓝色。但是,如果你发现这个修改没有生效,可能有以下几个原因: 1. 元素没有加载完成 如果你的修改代码在元素加载完成之前运行,它就会失效。确保在修改元素样式之前,元素已经被完全加载。 2. 样式被覆盖了 如果一个元素既有内联样式又有外部样式表或样式标签中的样式,内联样式就会被覆盖。如果想要修改外部样式表或样式标签中的样式,可以使用 CSS rules 或者 getComputedStyle() 方法。 3. 样式属性名称错误 确保你修改的是正确的样式属性,比如将 backgroundColor 写成了 background-color。 4. 元素不可见 如果元素被 display:none 隐藏了,也就无法看到修改的效果。可以通过修改 display 属性或在修改样式之前确保元素可见来解决这个问题。 5. 代码有误 可能是因为编写的代码存在错误导致修改无效,请检查代码是否符合语法规范和逻辑。 总之,用 element.style 修改无效这种情况可能有多种原因,需要针对具体情况进行分析和解决
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弄堂汪

看了觉得好,就请我喝瓶水吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值