2012-05-30 3 views
0

Итак, у меня есть поле ввода, которое, когда вы переходите к нему с помощью мыши, обычно не работает. Это происходит потому, что:javascript, распространение событий и поля ввода

  • входа создается после загрузки путем расширения этого элемента в режиме редактирования
  • Чтобы развернуть элемент, мы используем событие щелчка на Ли, который является родителем названия, которое заменяется с входом
  • Благодаря тому, как работает приложение, мы должны использовать жить вместо мыши, который не позволяет использовать stopPropagation()

Так мы используем:

$('li').live("click",function(e) { 
    if ($(e.target).is('input')) { return; } 

    // do stuff 
}); 

Тогда из-за этого, очевидно, каждый раз, когда мышь пытается щелкнуть по вводу, либо для перемещения курсора, выделения его содержимого и т. Д., Он просто игнорирует его.

Если я удаляю целевую линию, когда я нажимаю на вход, она закрывает ли.

Итак ... мой вопрос: Любая идея, как сделать ввод кликабельным, не закрывая ли, и все еще быть в состоянии использовать живой, а не кликнуть?

+0

* "Тогда из-за этого, очевидно, какое-то время мышь пытается нажать на входе, либо для перемещения курсора, выделения его содержимого и т. д., он просто игнорирует его ». * Зачем это делать? Вы не вызывали 'preventDefault' или выполняли' return false'. –

+1

* «Чтобы развернуть элемент, мы используем событие click на листе, являющемся родителем заголовка, и которое заменяется на вход« * Вы заменяете 'li' на' input'? Это приведет к недопустимой структуре DOM, единственные элементы 'li' будут действительны, элементы' input' недопустимы. Код стоит тысячи слов, рекомендуется показать нам полный, упрощенный, автономный пример (отправьте код на вопрос и, возможно, * также * на http://jsbin.com или http://jsfiddle.net). –

+0

Не вижу проблемы с этой проверкой: http://jsbin.com/eritof (у меня был 'input' заменить' span' внутри 'li'). Замечание: 'live' устарел и никогда не был очень хорошей идеей, рекомендуется использовать' delegate' в контейнере рядом с элементами 'li' (например,' ul' или 'ol', в котором они находятся). С jQuery 1.7 или выше вы можете использовать 'on', а не' делегат', хотя лично я предпочитаю ясность первого. Но в этом примере JSBin, который я использовал, используется 'live', так как это то, что вы используете. –

ответ

0

Привет, если я прав, вы хотите предотвратить распространение событий, но вы не можете использовать метод stopPropagation(). Проверьте документацию в реальном режиме, если вы хотите прекратить распространение, ваш метод должен вернуть false;

См апи документацию для живого метода: live()

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