1
$('#firstname').bind('focusout focusin', function() {
    var get_firstname = $("#firstname").val().replace(/ /g, "+");
    var n_firstname = get_firstname.length;
    if (n_firstname > 2) {
        $(".firstname_good").fadeIn("fast");
        var firstname_v = 1;
    }
    else {
        $(".firstname_good").fadeOut("fast");
        var firstname_v = '';
    }
});​

以下のVARfirstname_vの使用方法を理解するのに問題があります。以下で使用できるようにするには、上記で何をする必要がありますか

$('#lastname').bind('focusout focusin', function() {
    if (firstname_v == 1) {
        alert(firstname_v);
    }
});​
4

4 に答える 4

2

両方の内部スコープがアクセスできる、より高いスコープで変数を宣言する必要があります。

var firstname_v; // declare it

$('#firstname').bind('focusout focusin', function() {
    var get_firstname = $("#firstname").val().replace(/ /g, "+");
    var n_firstname = get_firstname.length;
    if (n_firstname > 2) {
        $(".firstname_good").fadeIn("fast");
        firstname_v = 1; // no var here, you're just setting it
    }
    else {
        $(".firstname_good").fadeOut("fast");
        firstname_v = ''; // no var here, you're just setting it
    }
});​

$('#lastname').bind('focusout focusin', function() {
    if (firstname_v == 1) { // no var here, you're just getting it
        alert(firstname_v);
    }
});​
于 2012-07-13T18:53:02.600 に答える
1

問題は、変数がコールバック関数に対してローカルであるということです。

次のように外で宣言します。

   var firstname_v = '';

   $('#firstname').bind('focusout focusin', function() {
    var get_firstname = $("#firstname").val().replace(/ /g, "+");
    var n_firstname = get_firstname.length;
    if (n_firstname > 2) {
        $(".firstname_good").fadeIn("fast");
        firstname_v = 1;
    }
    else {
        $(".firstname_good").fadeOut("fast");
    }
});​
于 2012-07-13T18:50:34.893 に答える
1

一番上のブロックを次のように変更します。

var firstname_v;
$('#firstname').bind('focusout focusin', function() {
    var get_firstname = $("#firstname").val().replace(/ /g, "+");
    var n_firstname = get_firstname.length;
    if (n_firstname > 2) {
        $(".firstname_good").fadeIn("fast");
        firstname_v = 1;
    }
    else {
        $(".firstname_good").fadeOut("fast");
        firstname_v = '';
    }
});​

唯一の実際の変更は、の宣言がfirstname_v関数の内部ではなく関数の外部で行われるようになったことです。これは、コード全体で利用できるようになるということです。

于 2012-07-13T18:51:57.437 に答える
0

これを行う:

var firstname_v = 0;

$('#firstname').bind('focusout focusin', function() {
    var get_firstname = $("#firstname").val().replace(/ /g,"+");
    var n_firstname = get_firstname.length;

    if (n_firstname > 2) {  
        $(".firstname_good").fadeIn("fast"); 
        firstname_v = 1; 
    } else { 
        $(".firstname_good").fadeOut("fast"); 
    }
});

$('#lastname').bind('focusout focusin', function() {
    if (firstname_v == 1) {
        alert(firstname_v);
    }
});​
于 2012-07-13T18:51:38.980 に答える