2010-02-05 4 views
0

У меня есть небольшая проблема с диалогом jQuery и способом обработки сценариев.jQuery диалоговые скрипты для ввода val

В диалоговом HTML, у меня есть

<input id="test"> 

Если я

<script type="text/javascript> 
    $('#test').val("haha") 
</script> 

после на вход, он показывает вверх. Если я положил до, он не работает. Теперь проблема в том, что я пытаюсь изменить значение $ ('# test') с помощью триггера щелчка, и я не могу!

$('.testbutton').click(function() { 
      alert();  
      $('#test').val("haha"); 
    }); 

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

Общий сценарий, как сейчас, не работает:

<input type="button" class="testbutton" /> 
<input type="text" size="10" id="test" name="test" value=""> 

$('#test').val("currentvalue"); // This works 
     $('.testbutton').click(function() { 
       alert();  
       $('#test').val("haha"); 
     }); 

Update Диалог показывает правильное значение в #test раз диалоговое окно закрывается, а затем возобновлено. Может ли это быть чем-то, что мне не хватает?

+0

Уверены ли 'val()' прямо здесь? Afaik его для ''. Попробуйте 'attr (" value ")' – ZeissS

+1

@ZeissS - 'val()' отлично работает для входов –

+0

Действительно, 'val()' лучше. 'attr ('value')' работает для ввода, потому что он переводится в JavaScript '.value' на узле HTMLInputElement. Он * не * получает доступ к атрибуту HTML 'значение', что совсем другое: атрибут' value' соответствует свойству JavaScript .defaultValue', а не '.value'. – bobince

ответ

0

Проблема закончилась тем, что была # в тесте. По какой-то причине замена работает с идентификатором класса, а не с идентификатором идентификатора. Полагаю, это потому, что # заменит только один экземпляр, и по какой-то причине я еще не обнаружил, есть более одного экземпляра диалога (или скрытого).

Спасибо за все ваши предложения!

2

Введите код jQuery в $(document).ready(function() {...your code...}). Это сделает его выполненным после браузер создает дерево DOM для вашей страницы. В противном случае javascript не сможет правильно искать/манипулировать элементами DOM. Это будет выглядеть следующим образом:

$(document).ready(function() { 
    $('.testbutton').click(function() { 
      $('#test').val("haha"); 
    }); 
}); 

Update:

Если ваш HTML код загружается динамически, а затем использовать live связать обработчик события:

$(document).ready(function() { 
    $('.testbutton').live("click", function() { 
      $('#test').val("haha"); 
    }); 
}); 
+0

Ну, если это диалог, возможно, что он загружается через AJAX и что это фрагмент HTML. Если это так, то не будет никакого «готового» события для этого контента. – Pointy

+0

Он должен работать ... – Rifat

+0

Нет, не работает.Диалог - это событие DOM в любом случае, поэтому добавление документа. Уже внутри диалогового окна не совсем понятно, я думаю? – Rio

0

Я думаю, вы должны обернуть код внутри $ (function() {// код здесь}); чтобы убедиться, что ваш код запущен только тогда, когда ваш DOM готов.

+0

Опять же, если содержимое диалогового окна является фрагментом HTML, загруженным через AJAX, нет никакого «готового» события. Конечно, я не знаю, что так работает его диалог, потому что исходный вопрос не очень хорошо описывает окружающую среду. – Pointy

+0

Если вы загружаете HTML через AJAX, вы должны запустить метод связывания после загрузки HTML в DOM, это зависит от конкретного варианта использования. –

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