Неправильный выбор jQuery в IE - PullRequest
1 голос
/ 23 июня 2010

Я пишу простое приложение, которое включает изменение html в div, на которое ссылается имя, и оно отлично работает в Chrome, Firefox, Safari и т. Д., Но не в нашем любимом Internet Explorer. Я загружаю контент динамически, поэтому я не могу дать вам полный код, но вот пример HTML (где было бы много таких div, уложенных с возрастающими числовыми именами):

<div id="entry" class="entry" name="15">
    <div id="comment" class="comment" name="15">Click here...</div>
    <div id="rating" class="rating" name="15">24</div>
</div>

А вот функция jQuery, запускаемая, когда пользователь нажимает на элемент div «entry»:

$.fn.rateup = function() {
    var dname = $(this).attr('name');
    var rating = $("div.rating[name="+dname+"]").html();
    var newrating = parseInt(rating)+1;
    $("div.rating[name="+dname+"]").html(newrating);
}

Теперь я хочу, чтобы HTML в div рейтинга в дивизионе clicked entry увеличился на единицу, но в IE рейтинг элемента div ниже кликаемого клика увеличивается. Я понятия не имею, как он мог бы выбрать неправильный div здесь, так как у него очень специфическое имя, на которое очень четко ссылается мой код. Я попытался сделать то же самое с методом jfuery .find () в элементе div, по которому щелкнули, и получил тот же результат. Я в тупике.

Нажмите здесь , чтобы увидеть, о чем я говорю. Это может быть ошибка в других отношениях, но это единственное, что меня беспокоит в данный момент. Если худшее приходит к худшему, я могу просто выбрать элемент с [name = parseInt (dname) -1] тогда и только тогда, когда он будет отображаться в IE, но я бы хотел найти менее хакерское решение.

Спасибо за ваши мысли.

РЕДАКТИРОВАТЬ (6/24 23:30)

С учетом приведенных ниже ответов и моего нового знания о том, что какой-то изворотливый CSS позиционирует вещи в непонятных местах (встроенное плавное перетаскивание вправо перемещает их на следующую строку, если не обрабатывается правильно), я решил эту проблему. Спасибо вам всем за то, что помогли мне стать лучшим программистом. Я начну использовать атрибуты более правильно!

Ответы [ 3 ]

2 голосов
/ 23 июня 2010

Ну, я думаю, вы путаете селектор.

<div id="e15" class="entry">
    <div class="comment">Click here...</div>
    <div class="rating">24</div>
</div>

если вы попытаетесь выбрать рейтинговый div сейчас, «this.rating» должна выбрать правильный.


PS Ваше поле имени не является обязательным и будет недействительным в xhtml. (Так как он может быть только членом поля формы)

2 голосов
/ 23 июня 2010

Я не думаю, что элементы DIV могут иметь атрибут name, но это не имеет значения, так как это не требуется, если вы выполняете все свои вычисления относительно DIV, на который был нажат ...

<div id="entry" class="entry">  
    <div class="comment">Click here...</div>  
    <div class="rating">24</div>  
</div>

<div id="anotherEntry" class="entry">  
    <div class="comment">Click here...</div>  
    <div class="rating">17</div>  
</div>


$.fn.rateup = function() { 
    var ratingElement = $(this).find("div.rating"); 
    var rating = ratingElement.html(); 
    var newrating = parseInt(rating)+1; 
    ratingElement.html(newrating); 
} 

Предполагается, что каждый рейтинг DIV заключен в свою собственную запись DIV, и к каждому из них прикреплен обработчик события $ .fn.rateup.

Что касается причины выбора неправильного рейтинга, это будет зависеть от того, к каким элементам прикреплены обработчики событий - можем ли мы увидеть код, который это делает?

0 голосов
/ 23 июня 2010

похоже, что вы могли бы упростить все, если правильно использовали идентификаторы. ;)

идентификаторы должны быть уникальными на всей странице, и кажется, что вы используете их больше как классы. возможно, использование идентификаторов, таких как «1» для входа, «c1» и «r1» для комментария и рейтинга, позволило бы более чистые селекторы, таким образом решая проблему полностью. тогда вы могли бы сделать что-то вроде

$('#r'+$(this).id).html(newrating)

на самом деле не решает проблему, т. Е. Вы видите, но делает чище HTML и javascript imho.

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