Как вытащить значение input type=“range” и отправить на сервер

119
12 августа 2019, 06:10

yii2, с помощью js надо поменять значение поля формы input type="range" на другое (получаю от сервера запросом).

Когда я задаю ему значение (через js), после отправки на сервер оно почему-то теряется.

Вопрос: какой атрибут забирает php экшен и какой атрибут устанавливает js? Как вытащить тот атрибут, который забирает php?

поле формы:

<?= 
    $form->field($check, 'brightnessLevel')
         ->label('Яркость')
         ->input('range', [
             'id' => 'brightness',
             'value' => 0,
             'min' => -100,
             'max' => 100
    ])
?>

функция:

function setDefaultValue() {
    var xhmlhr = new XMLHttpRequest();
    xhmlhr.withCredentials = true;
    xhmlhr.open('GET', '/url/url');
    xhmlhr.send();
    xhmlhr.onreadystatechange = function() {
        if (this.readyState === 4 && this.status === 200) 
            defalutVal = xhmlhr.responseText;
        brightness.setAttribute('disabled', true);
        brightness.value = defalutVal;
        changeBrightness();
    }
}

P.S. экшен:

    public function actionUpdate($id)
    {
        $check = new EditingImage();
        $model = $this->findModel($id);
        if ($check->load(Yii::$app->request->post())) {
//            if ($model->save()){
//            }
//          здесь значение теряется (если не таскать сам ползунок, а именно через js пытаться устанавливать)
            $check->status = $check::STATUS_ON;
            $check->dir = Images::IMAGES_DIR;
            $check->url = $model->url;
            if ($check->increaseBrightness())
                return $this->redirect(['view', 'id' => $model->id]);
        }
        return $this->render('update', [
            'model' => $model,
            'check' => $check,
        ]);
    }

pss

    console.log('defalutVal: ' + defalutVal);
    console.log('brightnessVal: ' + brightness.value);
    brightness.value = defalutVal;
    console.log('brightness.value = defalutVal (' + brightness.value + ')');

Answer 1

Не знаю почему не желаете пробовать с фигурными скобками как подсказал @Stepan Kasyanenko. Без них JS будет каждый раз выбрасывать исключение defalutVal is not defined, так как до ответа эта переменная не определена.

Проверьте, не отключен ли показ ошибок в консоли.

let handler = function() { 
  if (this.readyState === 4 && this.status === 200) { 
    defalutVal = this.responseText; 
    brightness.setAttribute('disabled', true); 
    brightness.value = defalutVal; 
  } 
  state.innerText = `readyState ${this.readyState}` 
} 
 
for (let i = 1; i < 5; i++) { 
  setTimeout(() => handler.call({ 
    readyState: i, 
    status: i === 4 && 200, 
    responseText: 50 
  }), 500 * i); 
}
<div id="state">readyState</div> 
<input id="brightness" type="range" min="-100" max="100" value="0">

Answer 2

надо было убрать эту строку:

    brightness.setAttribute('disabled', true);
READ ALSO
Метод Ньютона для комплексных чисел [закрыт]

Метод Ньютона для комплексных чисел [закрыт]

Здраствуйте, должен решить уравнение z^3 - 1 = 0, z - комплексное число

128
Обмен местами строк матрицы

Обмен местами строк матрицы

Необходимо поменять местами две строки матрицыНашел в интернете несколько примеров в которых используется поэлементный обмен

113
CryptoAPI генерация RSA ключей

CryptoAPI генерация RSA ключей

Необходимо генерировать закрытый и открытый ключ

123
Конвертировать черно-белое изображение малого размера в матрицу того же размера на C++

Конвертировать черно-белое изображение малого размера в матрицу того же размера на C++

Допустим есть черно-белое изображение размера 10x10 пикселей, то его нужно перевести в матрицу 10x10 в которой черному цвету будет соответствовать...

106