jQuery:在两个引号之间写入变量

jQuery: write variable between 2 quotation mark

本文关键字:之间 变量 两个 jQuery      更新时间:2023-09-26

我想为输入创建一个循环,以便变量img得到数字1到5,如下所示:

img1, img2 ... img5.

如何在img之后编写$i

for ($i=1;$i<=5;$i++) {
  function(data) { $('input[name="img1"]').val(data) });
}

注意:img位于两个引号之间。

编辑:

user = $('input[name="name"]').val();
for (var i = 1; i <= 5; i++) {
  $.post("test.php", { name: user, num: i },
  function(data) {
    $('input[name="img'+i+'"]').val(data)
  });
}

您在循环中声明的函数看起来很奇怪。这不是有效的javascript。您可以尝试以下操作:

for (var i = 1; i <= 5; i++) {
    $('input[name="img' + i + '"]').val(data);
}

或者如果我们假设你已经定义了一些函数:

var foo = function(data, index) {
    $('input[name="img' + index + '"]').val(data);
}

你可以这样调用它:

for (var i = 1; i <= 5; i++) {
    foo('some data ' + i, i);
}

更新:

评论部分提供了一个有趣的例子:

for (var i = 1; i <= 5; i++) { 
    $.post(
        "test.php", 
        { name: username, num: i }, 
        function(data) { 
            $('input[name="img'+i+'"]').val(data);
        }
    ); 
} 

这不会起作用,因为i变量可能在循环和AJAX成功回调之间更改了值。要解决此问题,您可以尝试以下操作:

for (var i = 1; i <= 5; i++) { 
    (function(index) {
        $.post(
            "test.php", 
            { name: username, num: index }, 
            function(data) { 
                $('input[name="img'+index+'"]').val(data);
            }
        ); 
    })(i);
} 

或者使用$.ajax()方法,该方法允许您将上下文传递给success回调:

for (var i = 1; i <= 5; i++) { 
    $.ajax({
        url: 'test.php',
        type: 'POST',
        data: { name: username, num: i },
        context: i, // here we are defining the context
        success: function(result) {
            // since we have used the context parameter, this variable
            // here will point to the value that i had when we initiated 
            // the AJAX request
            $('input[name="img' + this + '"]').val(result);
        }
    });
} 

像这样:

for ($i=1;$i<=5;$i++) {
    function(data) { $('input[name="img' + $i + '"]').val(data) });
}

顺便说一句,我猜你来自PHP背景,但在JavaScript中,将$用于变量名并不常见(有时用于jQuery对象除外)。所以通常你会这样写代码:

for (i=1;i<=5;i++) {
    function(data) { $('input[name="img' + i + '"]').val(data) });
}