2012-02-10 7 views
0

У меня есть глупая проблема.Изменить значение JS, PHP получить старое значение

В зависимости от видимости в DIV я хочу, чтобы установить скрытое значение

if($('#crewMember').is(':visible')) { 
    $('#visibility').attr('value', 'hidden') 
} else { 
    $('#visibility').attr('value', 'visible') 
} 

Это работает. Я проверил его через FireBug, и я вижу, что HTML изменился.

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

echo $_POST['visibility'] 
//returns default value, not the adjusted valueHow come? 

Почему?

EDIT пример кода

<html> 
    <script type="text/javascript"> 
     $(document).ready(function() { 

    $('#div').click(function() { 
     $('#visibility').val('hidden'); 
     $('#value').html('hidden value: ' + $('#visibility').val()); 
    }); 

    $('#value').html('hidden value: ' + $('#visibility').val()); 
    }); 

    <body> 
     <form method="post"> 
      <div id="div"> 
       click this area to change value 
      </div> 

      <div id="value"> <!-- This div will show the actual value of the hidden field --> 
      </div> 
      <input type="hidden" id="visibility" name="visibility" value="initial value" /> 
      <input type="submit" name="button" value="button" /> 
     </form> 
    </body> 
</html> 

Когда я отправить форму $ _POST [ 'видимость'] всегда содержит строку 'начальное значение'. Даже когда я изменил значение с JS на «hidden»;

+1

Не могли бы вы показать полный пример кода, который показывает проблему, включая HTML? – JJJ

+0

check fieldname id visability – Poonam

+0

Как вы отправляете форму? ajax? – ManseUK

ответ

1

Как сказал ManseUK, изменение $("").attr('value',...) к $("").val(...) (см jQuery documentation для .val)

Но ответ вопрос о почему, вам нужно понять, как объекты DOM работают в JavaScript. Для каждого элемента (div, p, a, img, form, input, независимо от ...) каждый отдельный элемент является объектом в DOM.

Вот важная часть: элемент имеет значение, но и каждый атрибут имеет значение. В jQuery, когда вы используете .attr('value',...), то, что вы действительно делаете, создает атрибут с именем 'value'. Но это НЕ изменяет значение , которое остается неизменным.

В firebug он будет читать атрибуты JavaScript и накладывать его поверх элемента, что объясняет, почему он появился в firebug. Однако, когда приходит время отправить данные на сервер, браузер НЕ отправит значения атрибута - только значение элемента (которое не изменилось). Но с использованием .val() изменится значение , которое будет передано на сервер.

Возможно, это будет иметь больше смысла в необработанном JavaScript, вместо JQuery:

эквивалент .attr() является: element.setAttribute("value","...");

эквивалент .val() является: element.value = "...";

Вы видите разницу? В .attr() вы никогда не изменяли значение, а только атрибут.

+0

Ключ в том, что атрибут «значение» и фактическое значение «узла» не совпадают; один из них просто инициализируется из другого. –

+0

Спасибо, ты дал мне понять это сейчас! – OrangeTux

+0

рад, что я мог бы помочь :) – cegfault

1

Попробуйте использовать val() вместо (им предполагается, что ваш visibility элемент является входным элементом):

if($('#crewMember').is(':visible')) { 
    $('#visibility').val('hidden'); 
} else { 
    $('#visibility').val('visible'); 
} 
+0

@LightnessRacesinOrbit Фактически у ОР были те ошибки, которые я исправил, и поэтому одни и те же ошибки видны в других ответах, поскольку они ссылались на исходный код OP. – linuxeasy

+0

@linuxeasy: О, правда. –

+0

спасибо за помощь – OrangeTux

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