当我从另一个选择内容时,我一直在尝试使用不同的方法让我的页面更新一个输入值。当我尝试一种方式使用javascript它工作正常,另一种方式通过jQuery它没有,老实说我不明白为什么,有人可以指出我错过了什么?
这个Javascript工作正常: -
function youPickedThis(id, num){
var objID = "any[" + num + "].id"
document.getElementById(objID).value = id
}
但是这个jQuery没有: -
function youPickedThis(id, num){
var objID = "any[" + num + "].id"
$("#"+objID).val(id);
}
正在使用/引用的对象都是在页面加载期间通过AJAX调用等加载的,这是否与导致问题的原因有关?
感谢您的任何指示,如果有人有任何良好的链接阅读解释这些东西我会非常感激! :)
也尝试了这个,但仍然没有骰子......
$(document).ready(function(){
function updateHiddenInput(id, num){
var objID = "any[" + num + "].id";
$("#"+objID).val(id);
}
});
答案 0 :(得分:3)
jQuery选择器和document.getElementById
之间存在差异。第二个做得少,所以它知道无论你给它什么,都会被视为id
。例如:
var objID = "any[" + num + "].id"
$("#"+objID).val(id);
这会是什么?我们假设num
是1
,比如说:
$('#any[1].id').val(id);
这会查找包含id
#any
,属性1
和类id
的元素,因为字符[].
都具有特殊含义在选择器中。要演示这一点,请在浏览器控制台中运行以下代码行:
$('<div id="any" class="id" 1="foo"/>').is('#any[1].id') // returns true
执行此选择的最佳方法是使用document.getElementById
进行选择,然后将其包装在jQuery构造函数中:
$(document.getElementById(objID)).val(id);
可能以\\
来转义特殊字符,但它变得越来越难以处理,难以(a)写入和(b)读取。
答案 1 :(得分:1)
你应该逃避方括号和点
var objID = "any\\[" + num + "\\]\\.id";
使用任何元字符(例如!“#$%&amp;'()* +,。/:;&lt; =&gt;?@ [] ^`{|}〜)作为文字作为名称的一部分,必须使用两个反斜杠进行转义:\。例如,id =“foo.bar”的元素可以使用选择器$(“#foo \ .bar”)。
参考
答案 2 :(得分:1)
你有这个:
function youPickedThis(id, num){
var objID = "any[" + num + "].id"
$("#"+objID).val(id);
}
这导致objID有一些像any[3].id
这样的值,所以你的jQuery看起来像这样:$("#any[3].id").val(id);
jQuery将.id解释为一个类。像这样逃避:
function youPickedThis(id, num){
var objID = "any\\[" + num + "\\]\\.id"
$("#"+objID).val(id);
}
答案 3 :(得分:1)
正如其他人所提到的,jQuery选择器和document.getElementById
之间存在差异。由于jQuery选择器必须解析字符串而某些字符如[
,]
具有特殊含义,而document.getElementById
将所有这些视为id的一部分。您可以尝试转义其他人提到的那些特殊字符。在这里,我给出另一个解决方案。
您可以尝试使用id属性选择器。它与document.getElementById
function youPickedThis(id, num){
var objID = "'any[" + num + "].id'"
$("[id="+objID+"]").val(id);
}