2017-03-17 80 views
-2

我想输入的值,并存储到一个变量和输出.VAL()在另一个元素,像这样:存储.VAL()一个变量中不起作用

<input type="text" name="abc" /> 
<button>Click me</button> 
<p></p> 
$(document).ready(function() { 
    var a = $('input').eq(0).val(); 
    var btn = $('button'); 

    btn.click(function() { 
    $('p').text(a); 
    }); 
}); 

这段代码不起作用。 此代码,但是,并完美地工作:

$(document).ready(function() { 
    var a = $('input').eq(0); 
    var btn = $('button'); 

    btn.click(function() { 
    $('p').text(a.val()); 
    }); 
}); 

当我把val()在点击功能,当我尝试存储val()变量里面没有工作,为什么工作?

+2

因为你的输入没有值,所以试试这个''这会起作用 – guradio

+0

假设你需要设置'a'值在点击处理程序中,用户在输入内容中键入内容...? –

回答

2

在你的第一个例子,你在文件准备

var a = $('input').eq(0).val(); //which is blank on document ready 

在第二个例子,你取取输入的值按钮值点击

$('p').text(a.val()); //a is a reference to your input tag 

因此,您的第一个片段失败,以及其他作品。

从技术上讲,您的第二个代码片段更具有意义,因为它可以重用。可重复使用的术语,如果您想对该input标签运行任何其他方法,那么如果最后有.val(),则无法执行此操作,因此最好对该元素进行引用,然后运行方法如果需要的话,就像你在第二段中做的那样。

要解决这个问题,您需要设置一些默认值,或者您需要使用第二个代码段。


此外,只是一个提示。忽略使用eq()并使用id来代替特定标签。如果你在你的页面上添加更多input标签,并且错误地在你预期的标签之前添加了input标签,那么你最终可能会陷入混乱。

+0

谢谢! 现在明白了,当然它必须是这样的:)我坐在这里,想知道这可能是怎么回事,但用清晰的答案是有道理的。 –

0

由于您的输入没有价值开始。在点击之前,你可能已经在输入上输入了一些东西,所以在点击后它有价值。

试试这个<input type="text" name="abc" value="string value"/>这将工作。

+0

谢谢!说得通! –