backbone.js 未捕获的语法错误:未能在“文档”上执行“querySelector”

w46czmvw  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(158)
<button id="'+item['id']+'" class="btnDeactivateKeyInChildPremiumCustomer waves-effect waves-light">ok</button>

我用上面的代码在jquery的每个函数中生成按钮。按钮是动态创建的,当我点击按钮时,它应该显示按钮的进度。我用的是Ladda Button Loader

btnDeactivateKeyInChildPremiumCustomerClick : function(event){
   var id = event.currentTarget.id;
   var btnProgress = Ladda.create(document.querySelector('#'+id));
   // btnProgress.start(); or btnProgress.stop();
}

然后我把按钮传递给事件处理器,事件处理器捕获事件处理上述函数。在该函数中,它将创建一个btnProgress对象。之后,我可以调用start()或停止()函数。我已经成功地在只有一个按钮的情况下工作了,没有在每个按钮内动态创建按钮。但是在每个情况下,它在执行var btnProgress = Ladda时显示了一些错误。创建一个文档;

错误

Uncaught SyntaxError: Failed to execute 'querySelector' on 'Document': '#22' is not a valid selector.
vc9ivgsu

vc9ivgsu1#

您可以在HTML5文档中使用以数字开头的ID:
该值在元素的主目录子树中的所有ID中必须是唯一的,并且必须至少包含一个字符。该值不得包含任何空格字符。
对于ID可以采取什么形式没有其他限制;特别地,ID可以仅由数字组成、以数字开始、以下划线开始、仅由标点符号组成等。
但是querySelector方法使用CSS3选择器来查询DOM,而CSS3不支持以数字开头的ID选择器:
在CSS中,标识符(包括选择器中的元素名称、类和ID)只能包含字符[a-zA-Z 0 -9]和ISO 10646字符U+00 A0及更高字符,以及连字符(-)和下划线(_);它们不能以一个数字、两个连字符或连字符后跟一个数字开头。
为ID属性使用类似b22的值,您的代码将正常工作。
由于要按ID选择元素,因此也可以使用.getElementById方法:

document.getElementById('22')
p1iqtdky

p1iqtdky2#

虽然这在HTML中有效,但不能在 CSS selectors 中使用以整数开头的ID。
如前所述,您可以使用getElementById来代替,但是您仍然可以使用querySelector来实现相同的效果:

document.querySelector("[id='22']")

相关问题