"ссылка" в JavaScript? - PullRequest
       2

"ссылка" в JavaScript?

2 голосов
/ 02 ноября 2011

У меня есть набор переменных, которые я использую, чтобы определить, был ли дан ответ на вопрос в опросе, и они изначально установлены в false: q0=false; q1=false; qX=false;. Затем в теле у меня есть несколько input type="radio" с .change(function(){ counter_radio(q#,INPUT'S_ID); });, привязанными к каждому. Это код для функции counter_radio ():

function counter_radio(q,id){
    if (q===false) {
        q=true;
        count++;
        $("#counter").css("width", count);
        $("#percent").text(count + "%");
    }
    $("span#"+id).append(", "+q);
    $("span#"+id).fadeIn();
}

Я ожидаю, что счетчик будет увеличиваться только один раз (при первом выборе радио из набора). Однако счетчик увеличивается каждый раз, когда меняется input type=radio. Моя проблема в том, что q возвращает true, но q# остается false. В php я бы сделал q ссылкой на q#, поэтому, когда q установлен в true, q# также установлен в true. Есть ли такая конструкция в javascript?

Ответы [ 4 ]

3 голосов
/ 02 ноября 2011

Вы можете изменить свою связанную функцию на:

.change(function(){ q# = counter_radio(q#,INPUT'S_ID); });

и добавьте return q; в конец функции counter_radio.

1 голос
/ 02 ноября 2011

Как уже говорили другие, простые переменные, такие как логические значения, передаются по значению, а не по ссылке в Javascript, поэтому изменить это невозможно.

Если у вас несколько переменных, подобных этой:

var q0=false, q1=false, qX=false;

тогда может быть проще поместить их в массив:

var qArray = [false, false, false];

Тогда, поскольку массивы и объекты передаются таким образом, что вы можете изменить оригинал, вы можете передать массив итакой индекс вашей функции, и вы сможете изменить исходные данные из вашей функции:

function counter_radio(q, index, id){
    if (q[index] === false) {
        q[index] = true;
        count++;
        $("#counter").css("width", count);
        $("#percent").text(count + "%");
    }
    $("span#"+id).append(", " + q[index]);
    $("span#"+id).fadeIn();
}

counter_radio(qArray, 2, id);
1 голос
/ 02 ноября 2011

Для этого нет собственного синтаксиса, но вы можете, например, используйте объекты для этого:

function counter_radio(q_,id){
    if (q_.ref===false) {
        q_.ref=true;
        count++;
        $("#counter").css("width", count);
        $("#percent").text(count + "%");
    }
    $("span#"+id).append(", "+q);
    $("span#"+id).fadeIn();
}
0 голосов
/ 02 ноября 2011

Я собираю значения, когда пользователь отправляет форму:

jQuery('radio[name=...]:checked').val()

Если вы хотите предупредить пользователя о том, что ответили не на все вопросы, воспользуйтесь плагином проверки jQuery .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...