Reputation: 13
i was trying to make a button onclick check so that lists' option classes weren't same:
<select name="names1" id="names1">
<option value="1" class="1">option 1</option>
<option value="2" class="1">option 2</option>
<option value="3" class="2">option 3</option>
</select>
<select name="names2" id="names2">
<option value="1" class="1">option 1</option>
<option value="2" class="1">option 2</option>
<option value="3" class="2">option 3</option>
</select>
<button type="button" name="button" onclick="check"></button>
function check() {
let optionClass1 = document.querySelector('select[name="names1"]').querySelector(':checked').attr('class')
let optionClass2 = document.querySelector('select[name="names2"]').querySelector(':checked').attr('class')
if (optionClass1 != optionClass2) {
alert("e")
}
}
but it's not workin: "':selected' is not a valid selector"
i dont know jack about jquery, please help
Upvotes: 0
Views: 1609
Reputation: 206593
.querySelector() is pure JavaScript and it doesn't have any .attr()
chainable Method.
.attr()
is a jQuery Method, therefore, instead of getting DOM elements using vanilla JS, use the $()
jQuery Object constructor.
Don't use inline JavaScript on*
handlers like onclick
. Use EventTarget.addEventListener() instead. JS (same as styles) should be in one place only and that's the respective tag or file.
Don't use class=""
to store arbitrary data. Use the valid HTML5 data-*
attribute instead:
Example using JavaScript (no libraries)
function check() {
const c1 = document.querySelector('select[name="names1"] option:checked').dataset.class;
const c2 = document.querySelector('select[name="names2"] option:checked').dataset.class;
if (c1 !== c2) {
alert("e")
}
}
document.querySelector("#check").addEventListener("click", check);
<select name="names1" id="names1">
<option value="1" data-class="1">option 1</option>
<option value="2" data-class="1">option 2</option>
<option value="3" data-class="2">option 3</option>
</select>
<select name="names2" id="names2">
<option value="1" data-class="1">option 1</option>
<option value="2" data-class="1">option 2</option>
<option value="3" data-class="2">option 3</option>
</select>
<button type="button" name="button" id="check">CHECK</button>
or by using jQuery
function check() {
const c1 = $('select[name="names1"] option:checked').data("class");
const c2 = $('select[name="names2"] option:checked').data("class");
if (c1 !== c2) {
alert("e")
}
}
$("#check").on("click", check);
<select name="names1" id="names1">
<option value="1" data-class="1">option 1</option>
<option value="2" data-class="1">option 2</option>
<option value="3" data-class="2">option 3</option>
</select>
<select name="names2" id="names2">
<option value="1" data-class="1">option 1</option>
<option value="2" data-class="1">option 2</option>
<option value="3" data-class="2">option 3</option>
</select>
<button type="button" name="button" id="check">CHECK</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
Upvotes: 2