jQuery更新不起作用,但javascript确实如此

时间:2013-11-16 07:33:18

标签: javascript jquery setvalue

当我从另一个选择内容时,我一直在尝试使用不同的方法让我的页面更新一个输入值。当我尝试一种方式使用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);
                }

            });     

4 个答案:

答案 0 :(得分:3)

jQuery选择器和document.getElementById之间存在差异。第二个做得少,所以它知道无论你给它什么,都会被视为id。例如:

var objID = "any[" + num + "].id"       
$("#"+objID).val(id);

这会是什么?我们假设num1,比如说:

$('#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”)。

参考

http://forum.jquery.com/topic/jquery-jquery-wont-recognise-attribute-names-containing-square-brackets#14737000000283511

答案 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);
}

DEMO