2017-04-04 40 views
0

我在iOS上使用基於jQuery的腳本時遇到問題(iPhone 6 & 6s)。它在Chrome和Safari中的表現方式相同,但我相信這是因爲在iOS中,Chrome實際上是UIWebView的包裝。無論如何,這是一個簡單的「星級評分」系統。下面是它的片段:iOS jQuery無法更改輸入值,「addClass」調用失敗

;(function($){ 
 
    $(document).on('click', '.star-rating-input .star', function(){ 
 
     var self = $(this); 
 
     var rating = self.data('rating'); 
 
     
 
     self.addClass('selected'); 
 
     self.siblings('.star').removeClass('selected'); 
 
     self.siblings('input[type="hidden"]').val(rating); 
 
    }); 
 
})(jQuery);
// This is irrelevant here, the only thing to know is that .selected & :focus class makes all previous .star spans change representation using :before pseudo-selector and it works on all other browsers including WP IE.
<div class="star-rating-input"> 
 
    <span class="star " data-rating="5"></span> 
 
    <span class="star " data-rating="4"></span> 
 
    <span class="star " data-rating="3"></span> 
 
    <span class="star " data-rating="2"></span> 
 
    <span class="star " data-rating="1"></span> 
 
    <input type="hidden" name="star_rating" value=""> 
 
</div>

通常情況下它工作正常,但在Safari和Chrome瀏覽器在iOS(iPhone 6和6秒,我只能假設它適用於iPhone的其他版本/ iOS的太):

  • 類不添加(這樣的明星正在改變只是暫時的,直到點擊跨度失去焦點)
  • 輸入,儘管期望得到一個字符串/數值,是流行根據Chrome DevTools使用HTMLFragment。

任何想法可能會導致此問題?也許有人知道這個問題的解決方案?

回答

2

我對此不完全確定。但是我認爲你正面臨這個問題,因爲你試圖檢測到非錨點元素的點擊(在這種情況下爲<span>)。嘗試添加下面的CSS,並檢查它在iOS上:

.star{ 
    cursor:pointer; 
} 
+0

我根本不相信它會起作用,但無論如何都試過了,而且非常驚喜 - 它的工作原理。 – user1970395

+1

我很高興它工作:) –

1

而不是

var rating = self.data('rating'); 

嘗試

var rating = self.attr('data-rating'); 

見此行後如何運作無法執行,也許是。數據在iOS中沒有真正支持。值得嘗試。

編輯:.data在iOS中工作,如上所述,點擊事件沒有正確觸發。

+0

對不起,我沒有嘗試你的解決方案,因爲一個標記爲正確的作品,這也意味着.data()是由iOS支持 – user1970395

+0

那麼,在我的時間張貼,您在該解決方案下的評論是,它沒有什麼區別,所以我假設你嘗試過。因此,我認爲click事件觸發.data有時不如.attr可靠。 –

+0

我明白了,對不起,我確實刪除了這個評論後,我意識到我已經測試了舊版本沒有改變!對困惑感到抱歉。事實是,它的工作原理,我也標記你的答案是有用的,因爲它導致的結論是.data()確實在iOS上工作(也許你可以添加到你的答案作爲編輯,使其明確)。 – user1970395