2017-02-15 5 views
2

У меня есть два скрытых поля ввода, которые изменяются, когда есть OnChange событие Это заполняется с динамической информацией о нагрузкеJavascript странно, если проблема

<input type="hidden" id="setter" name="{{$value['name']}}" value="{{$field['values'][$value['name']]}}"> 

Это один с пустым значением и именем

<input type="hidden" id="old_setter" name="" value=""> 

Это мой JS код

$('.select2').each(function(i, obj) { 
    if (!$(obj).data("select2")) { 
    $(obj).select2(); 
    } 
}).change(function() { 

    var oldSet = false; 
    var setter = $("#setter"); 
    var oldSetter = $("#old_setter"); 

    if (oldSet != true) { 

    oldSetter.val(''); 
    oldSetter.attr('name', setter.attr('name')); 
    setter.val(($(this).val())); 
    setter.attr('name', ($(this).attr('id'))); 
    oldSet = true; 

    } else { 

    setter.val(($(this).val())); 
    setter.attr('name', ($(this).attr('id'))); 
    oldSet = true; 

    } 
}); 

вопрос в том, когда скрытый сеттер получить вход от visib le setter в порядке, но после этого, когда есть еще одно событие onchange на скрытом установщике, оно также обновляется, но я хочу только обновить его в первом событии onchange. Заранее спасибо

+1

'if (oldSet! = True)' всегда будет ложным. Поскольку 'var oldSet = false' запускается непосредственно перед ним. – evolutionxbox

ответ

1

Вы имеете определить oldSet переменные вне события (в глобальном масштабе), иначе он будет возвращаться к false на каждом изменение пользователя, сделанный и условие всегда будет достигнуто:

var oldSet = false; 

$('.select2').each(function (i, obj) { 
    if (!$(obj).data("select2")) 
    { 
    $(obj).select2(); 
    } 
}).change(function() { 
    var setter = $("#setter"); 
    var oldSetter = $("#old_setter"); 

    if (oldSet != true) { 
    oldSetter.val(''); 
    oldSetter.attr('name', setter.attr('name')); 
    setter.val(($(this).val())); 
    setter.attr('name', ($(this).attr('id'))); 
    oldSet = true; 
    }else { 
    setter.val(($(this).val())); 
    setter.attr('name', ($(this).attr('id'))); 
    oldSet = true; 
    } 
}); 

Надеюсь, это поможет.

0

Установите обработчик изменений на пустую функцию после первого события.

$('.select2').change(function(){}); 
+0

Я не буду тестировать ваше решение, потому что @Acharki уже дал мне решение btw. Я не думаю, что ваше решение связано с проблемой в любом случае. P.S Спасибо за ваше время –

 Смежные вопросы

  • Нет связанных вопросов^_^